diff --git a/include/detail_equality_checks/vk_equality_checks_v198.hpp b/include/detail_equality_checks/vk_equality_checks_v198.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..77841f40bf4c4e51a9d56acff6c2ff21da3c0dce
--- /dev/null
+++ b/include/detail_equality_checks/vk_equality_checks_v198.hpp
@@ -0,0 +1,15134 @@
+/*
+    Copyright (C) 2020 George Cave - gcave@stablecoder.ca
+
+    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.
+*/
+
+/*
+    This file was auto-generated by the Vulkan mini-libs utility can be found at
+    https://github.com/stablecoder/vulkan-mini-libs.git
+    or
+    https://git.stabletec.com/utilities/vulkan-mini-libs.git
+
+    Check for an updated version anytime, or state concerns/bugs.
+*/
+
+#ifndef VK_EQUALITY_CHECK_V198_HPP
+#define VK_EQUALITY_CHECK_V198_HPP
+
+/*  USAGE:
+    To use, include this header where the declarations for the boolean checks are required.
+
+    On *ONE* compilation unit, include the definition of `#define VK_EQUALITY_CHECK_CONFIG_MAIN`
+    so that the definitions are compiled somewhere following the one definition rule.
+*/
+
+#include <vulkan/vulkan.h>
+
+static_assert(VK_HEADER_VERSION == 198, "Incompatible VK_HEADER_VERSION!" );
+
+bool operator==(VkBaseOutStructure const &lhs,
+                VkBaseOutStructure const &rhs) noexcept;
+bool operator!=(VkBaseOutStructure const &lhs,
+                VkBaseOutStructure const &rhs) noexcept;
+
+bool operator==(VkBaseInStructure const &lhs,
+                VkBaseInStructure const &rhs) noexcept;
+bool operator!=(VkBaseInStructure const &lhs,
+                VkBaseInStructure const &rhs) noexcept;
+
+bool operator==(VkOffset2D const &lhs,
+                VkOffset2D const &rhs) noexcept;
+bool operator!=(VkOffset2D const &lhs,
+                VkOffset2D const &rhs) noexcept;
+
+bool operator==(VkOffset3D const &lhs,
+                VkOffset3D const &rhs) noexcept;
+bool operator!=(VkOffset3D const &lhs,
+                VkOffset3D const &rhs) noexcept;
+
+bool operator==(VkExtent2D const &lhs,
+                VkExtent2D const &rhs) noexcept;
+bool operator!=(VkExtent2D const &lhs,
+                VkExtent2D const &rhs) noexcept;
+
+bool operator==(VkExtent3D const &lhs,
+                VkExtent3D const &rhs) noexcept;
+bool operator!=(VkExtent3D const &lhs,
+                VkExtent3D const &rhs) noexcept;
+
+bool operator==(VkViewport const &lhs,
+                VkViewport const &rhs) noexcept;
+bool operator!=(VkViewport const &lhs,
+                VkViewport const &rhs) noexcept;
+
+bool operator==(VkRect2D const &lhs,
+                VkRect2D const &rhs) noexcept;
+bool operator!=(VkRect2D const &lhs,
+                VkRect2D const &rhs) noexcept;
+
+bool operator==(VkClearRect const &lhs,
+                VkClearRect const &rhs) noexcept;
+bool operator!=(VkClearRect const &lhs,
+                VkClearRect const &rhs) noexcept;
+
+bool operator==(VkComponentMapping const &lhs,
+                VkComponentMapping const &rhs) noexcept;
+bool operator!=(VkComponentMapping const &lhs,
+                VkComponentMapping const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceProperties const &lhs,
+                VkPhysicalDeviceProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceProperties const &lhs,
+                VkPhysicalDeviceProperties const &rhs) noexcept;
+
+bool operator==(VkExtensionProperties const &lhs,
+                VkExtensionProperties const &rhs) noexcept;
+bool operator!=(VkExtensionProperties const &lhs,
+                VkExtensionProperties const &rhs) noexcept;
+
+bool operator==(VkLayerProperties const &lhs,
+                VkLayerProperties const &rhs) noexcept;
+bool operator!=(VkLayerProperties const &lhs,
+                VkLayerProperties const &rhs) noexcept;
+
+bool operator==(VkApplicationInfo const &lhs,
+                VkApplicationInfo const &rhs) noexcept;
+bool operator!=(VkApplicationInfo const &lhs,
+                VkApplicationInfo const &rhs) noexcept;
+
+bool operator==(VkAllocationCallbacks const &lhs,
+                VkAllocationCallbacks const &rhs) noexcept;
+bool operator!=(VkAllocationCallbacks const &lhs,
+                VkAllocationCallbacks const &rhs) noexcept;
+
+bool operator==(VkDeviceQueueCreateInfo const &lhs,
+                VkDeviceQueueCreateInfo const &rhs) noexcept;
+bool operator!=(VkDeviceQueueCreateInfo const &lhs,
+                VkDeviceQueueCreateInfo const &rhs) noexcept;
+
+bool operator==(VkQueueFamilyProperties const &lhs,
+                VkQueueFamilyProperties const &rhs) noexcept;
+bool operator!=(VkQueueFamilyProperties const &lhs,
+                VkQueueFamilyProperties const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMemoryProperties const &lhs,
+                VkPhysicalDeviceMemoryProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMemoryProperties const &lhs,
+                VkPhysicalDeviceMemoryProperties const &rhs) noexcept;
+
+bool operator==(VkMemoryAllocateInfo const &lhs,
+                VkMemoryAllocateInfo const &rhs) noexcept;
+bool operator!=(VkMemoryAllocateInfo const &lhs,
+                VkMemoryAllocateInfo const &rhs) noexcept;
+
+bool operator==(VkMemoryRequirements const &lhs,
+                VkMemoryRequirements const &rhs) noexcept;
+bool operator!=(VkMemoryRequirements const &lhs,
+                VkMemoryRequirements const &rhs) noexcept;
+
+bool operator==(VkSparseImageFormatProperties const &lhs,
+                VkSparseImageFormatProperties const &rhs) noexcept;
+bool operator!=(VkSparseImageFormatProperties const &lhs,
+                VkSparseImageFormatProperties const &rhs) noexcept;
+
+bool operator==(VkSparseImageMemoryRequirements const &lhs,
+                VkSparseImageMemoryRequirements const &rhs) noexcept;
+bool operator!=(VkSparseImageMemoryRequirements const &lhs,
+                VkSparseImageMemoryRequirements const &rhs) noexcept;
+
+bool operator==(VkMemoryType const &lhs,
+                VkMemoryType const &rhs) noexcept;
+bool operator!=(VkMemoryType const &lhs,
+                VkMemoryType const &rhs) noexcept;
+
+bool operator==(VkMemoryHeap const &lhs,
+                VkMemoryHeap const &rhs) noexcept;
+bool operator!=(VkMemoryHeap const &lhs,
+                VkMemoryHeap const &rhs) noexcept;
+
+bool operator==(VkMappedMemoryRange const &lhs,
+                VkMappedMemoryRange const &rhs) noexcept;
+bool operator!=(VkMappedMemoryRange const &lhs,
+                VkMappedMemoryRange const &rhs) noexcept;
+
+bool operator==(VkFormatProperties const &lhs,
+                VkFormatProperties const &rhs) noexcept;
+bool operator!=(VkFormatProperties const &lhs,
+                VkFormatProperties const &rhs) noexcept;
+
+bool operator==(VkImageFormatProperties const &lhs,
+                VkImageFormatProperties const &rhs) noexcept;
+bool operator!=(VkImageFormatProperties const &lhs,
+                VkImageFormatProperties const &rhs) noexcept;
+
+bool operator==(VkDescriptorBufferInfo const &lhs,
+                VkDescriptorBufferInfo const &rhs) noexcept;
+bool operator!=(VkDescriptorBufferInfo const &lhs,
+                VkDescriptorBufferInfo const &rhs) noexcept;
+
+bool operator==(VkDescriptorImageInfo const &lhs,
+                VkDescriptorImageInfo const &rhs) noexcept;
+bool operator!=(VkDescriptorImageInfo const &lhs,
+                VkDescriptorImageInfo const &rhs) noexcept;
+
+bool operator==(VkWriteDescriptorSet const &lhs,
+                VkWriteDescriptorSet const &rhs) noexcept;
+bool operator!=(VkWriteDescriptorSet const &lhs,
+                VkWriteDescriptorSet const &rhs) noexcept;
+
+bool operator==(VkCopyDescriptorSet const &lhs,
+                VkCopyDescriptorSet const &rhs) noexcept;
+bool operator!=(VkCopyDescriptorSet const &lhs,
+                VkCopyDescriptorSet const &rhs) noexcept;
+
+bool operator==(VkBufferCreateInfo const &lhs,
+                VkBufferCreateInfo const &rhs) noexcept;
+bool operator!=(VkBufferCreateInfo const &lhs,
+                VkBufferCreateInfo const &rhs) noexcept;
+
+bool operator==(VkBufferViewCreateInfo const &lhs,
+                VkBufferViewCreateInfo const &rhs) noexcept;
+bool operator!=(VkBufferViewCreateInfo const &lhs,
+                VkBufferViewCreateInfo const &rhs) noexcept;
+
+bool operator==(VkImageSubresource const &lhs,
+                VkImageSubresource const &rhs) noexcept;
+bool operator!=(VkImageSubresource const &lhs,
+                VkImageSubresource const &rhs) noexcept;
+
+bool operator==(VkImageSubresourceLayers const &lhs,
+                VkImageSubresourceLayers const &rhs) noexcept;
+bool operator!=(VkImageSubresourceLayers const &lhs,
+                VkImageSubresourceLayers const &rhs) noexcept;
+
+bool operator==(VkImageSubresourceRange const &lhs,
+                VkImageSubresourceRange const &rhs) noexcept;
+bool operator!=(VkImageSubresourceRange const &lhs,
+                VkImageSubresourceRange const &rhs) noexcept;
+
+bool operator==(VkMemoryBarrier const &lhs,
+                VkMemoryBarrier const &rhs) noexcept;
+bool operator!=(VkMemoryBarrier const &lhs,
+                VkMemoryBarrier const &rhs) noexcept;
+
+bool operator==(VkBufferMemoryBarrier const &lhs,
+                VkBufferMemoryBarrier const &rhs) noexcept;
+bool operator!=(VkBufferMemoryBarrier const &lhs,
+                VkBufferMemoryBarrier const &rhs) noexcept;
+
+bool operator==(VkImageMemoryBarrier const &lhs,
+                VkImageMemoryBarrier const &rhs) noexcept;
+bool operator!=(VkImageMemoryBarrier const &lhs,
+                VkImageMemoryBarrier const &rhs) noexcept;
+
+bool operator==(VkImageCreateInfo const &lhs,
+                VkImageCreateInfo const &rhs) noexcept;
+bool operator!=(VkImageCreateInfo const &lhs,
+                VkImageCreateInfo const &rhs) noexcept;
+
+bool operator==(VkSubresourceLayout const &lhs,
+                VkSubresourceLayout const &rhs) noexcept;
+bool operator!=(VkSubresourceLayout const &lhs,
+                VkSubresourceLayout const &rhs) noexcept;
+
+bool operator==(VkImageViewCreateInfo const &lhs,
+                VkImageViewCreateInfo const &rhs) noexcept;
+bool operator!=(VkImageViewCreateInfo const &lhs,
+                VkImageViewCreateInfo const &rhs) noexcept;
+
+bool operator==(VkBufferCopy const &lhs,
+                VkBufferCopy const &rhs) noexcept;
+bool operator!=(VkBufferCopy const &lhs,
+                VkBufferCopy const &rhs) noexcept;
+
+bool operator==(VkSparseMemoryBind const &lhs,
+                VkSparseMemoryBind const &rhs) noexcept;
+bool operator!=(VkSparseMemoryBind const &lhs,
+                VkSparseMemoryBind const &rhs) noexcept;
+
+bool operator==(VkSparseImageMemoryBind const &lhs,
+                VkSparseImageMemoryBind const &rhs) noexcept;
+bool operator!=(VkSparseImageMemoryBind const &lhs,
+                VkSparseImageMemoryBind const &rhs) noexcept;
+
+bool operator==(VkSparseBufferMemoryBindInfo const &lhs,
+                VkSparseBufferMemoryBindInfo const &rhs) noexcept;
+bool operator!=(VkSparseBufferMemoryBindInfo const &lhs,
+                VkSparseBufferMemoryBindInfo const &rhs) noexcept;
+
+bool operator==(VkSparseImageOpaqueMemoryBindInfo const &lhs,
+                VkSparseImageOpaqueMemoryBindInfo const &rhs) noexcept;
+bool operator!=(VkSparseImageOpaqueMemoryBindInfo const &lhs,
+                VkSparseImageOpaqueMemoryBindInfo const &rhs) noexcept;
+
+bool operator==(VkSparseImageMemoryBindInfo const &lhs,
+                VkSparseImageMemoryBindInfo const &rhs) noexcept;
+bool operator!=(VkSparseImageMemoryBindInfo const &lhs,
+                VkSparseImageMemoryBindInfo const &rhs) noexcept;
+
+bool operator==(VkBindSparseInfo const &lhs,
+                VkBindSparseInfo const &rhs) noexcept;
+bool operator!=(VkBindSparseInfo const &lhs,
+                VkBindSparseInfo const &rhs) noexcept;
+
+bool operator==(VkImageCopy const &lhs,
+                VkImageCopy const &rhs) noexcept;
+bool operator!=(VkImageCopy const &lhs,
+                VkImageCopy const &rhs) noexcept;
+
+bool operator==(VkImageBlit const &lhs,
+                VkImageBlit const &rhs) noexcept;
+bool operator!=(VkImageBlit const &lhs,
+                VkImageBlit const &rhs) noexcept;
+
+bool operator==(VkBufferImageCopy const &lhs,
+                VkBufferImageCopy const &rhs) noexcept;
+bool operator!=(VkBufferImageCopy const &lhs,
+                VkBufferImageCopy const &rhs) noexcept;
+
+bool operator==(VkImageResolve const &lhs,
+                VkImageResolve const &rhs) noexcept;
+bool operator!=(VkImageResolve const &lhs,
+                VkImageResolve const &rhs) noexcept;
+
+bool operator==(VkShaderModuleCreateInfo const &lhs,
+                VkShaderModuleCreateInfo const &rhs) noexcept;
+bool operator!=(VkShaderModuleCreateInfo const &lhs,
+                VkShaderModuleCreateInfo const &rhs) noexcept;
+
+bool operator==(VkDescriptorSetLayoutBinding const &lhs,
+                VkDescriptorSetLayoutBinding const &rhs) noexcept;
+bool operator!=(VkDescriptorSetLayoutBinding const &lhs,
+                VkDescriptorSetLayoutBinding const &rhs) noexcept;
+
+bool operator==(VkDescriptorSetLayoutCreateInfo const &lhs,
+                VkDescriptorSetLayoutCreateInfo const &rhs) noexcept;
+bool operator!=(VkDescriptorSetLayoutCreateInfo const &lhs,
+                VkDescriptorSetLayoutCreateInfo const &rhs) noexcept;
+
+bool operator==(VkDescriptorPoolSize const &lhs,
+                VkDescriptorPoolSize const &rhs) noexcept;
+bool operator!=(VkDescriptorPoolSize const &lhs,
+                VkDescriptorPoolSize const &rhs) noexcept;
+
+bool operator==(VkDescriptorPoolCreateInfo const &lhs,
+                VkDescriptorPoolCreateInfo const &rhs) noexcept;
+bool operator!=(VkDescriptorPoolCreateInfo const &lhs,
+                VkDescriptorPoolCreateInfo const &rhs) noexcept;
+
+bool operator==(VkDescriptorSetAllocateInfo const &lhs,
+                VkDescriptorSetAllocateInfo const &rhs) noexcept;
+bool operator!=(VkDescriptorSetAllocateInfo const &lhs,
+                VkDescriptorSetAllocateInfo const &rhs) noexcept;
+
+bool operator==(VkSpecializationMapEntry const &lhs,
+                VkSpecializationMapEntry const &rhs) noexcept;
+bool operator!=(VkSpecializationMapEntry const &lhs,
+                VkSpecializationMapEntry const &rhs) noexcept;
+
+bool operator==(VkSpecializationInfo const &lhs,
+                VkSpecializationInfo const &rhs) noexcept;
+bool operator!=(VkSpecializationInfo const &lhs,
+                VkSpecializationInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineShaderStageCreateInfo const &lhs,
+                VkPipelineShaderStageCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineShaderStageCreateInfo const &lhs,
+                VkPipelineShaderStageCreateInfo const &rhs) noexcept;
+
+bool operator==(VkComputePipelineCreateInfo const &lhs,
+                VkComputePipelineCreateInfo const &rhs) noexcept;
+bool operator!=(VkComputePipelineCreateInfo const &lhs,
+                VkComputePipelineCreateInfo const &rhs) noexcept;
+
+bool operator==(VkVertexInputBindingDescription const &lhs,
+                VkVertexInputBindingDescription const &rhs) noexcept;
+bool operator!=(VkVertexInputBindingDescription const &lhs,
+                VkVertexInputBindingDescription const &rhs) noexcept;
+
+bool operator==(VkVertexInputAttributeDescription const &lhs,
+                VkVertexInputAttributeDescription const &rhs) noexcept;
+bool operator!=(VkVertexInputAttributeDescription const &lhs,
+                VkVertexInputAttributeDescription const &rhs) noexcept;
+
+bool operator==(VkPipelineVertexInputStateCreateInfo const &lhs,
+                VkPipelineVertexInputStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineVertexInputStateCreateInfo const &lhs,
+                VkPipelineVertexInputStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineInputAssemblyStateCreateInfo const &lhs,
+                VkPipelineInputAssemblyStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineInputAssemblyStateCreateInfo const &lhs,
+                VkPipelineInputAssemblyStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineTessellationStateCreateInfo const &lhs,
+                VkPipelineTessellationStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineTessellationStateCreateInfo const &lhs,
+                VkPipelineTessellationStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineViewportStateCreateInfo const &lhs,
+                VkPipelineViewportStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineViewportStateCreateInfo const &lhs,
+                VkPipelineViewportStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineRasterizationStateCreateInfo const &lhs,
+                VkPipelineRasterizationStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineRasterizationStateCreateInfo const &lhs,
+                VkPipelineRasterizationStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineMultisampleStateCreateInfo const &lhs,
+                VkPipelineMultisampleStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineMultisampleStateCreateInfo const &lhs,
+                VkPipelineMultisampleStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineColorBlendAttachmentState const &lhs,
+                VkPipelineColorBlendAttachmentState const &rhs) noexcept;
+bool operator!=(VkPipelineColorBlendAttachmentState const &lhs,
+                VkPipelineColorBlendAttachmentState const &rhs) noexcept;
+
+bool operator==(VkPipelineColorBlendStateCreateInfo const &lhs,
+                VkPipelineColorBlendStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineColorBlendStateCreateInfo const &lhs,
+                VkPipelineColorBlendStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineDynamicStateCreateInfo const &lhs,
+                VkPipelineDynamicStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineDynamicStateCreateInfo const &lhs,
+                VkPipelineDynamicStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkStencilOpState const &lhs,
+                VkStencilOpState const &rhs) noexcept;
+bool operator!=(VkStencilOpState const &lhs,
+                VkStencilOpState const &rhs) noexcept;
+
+bool operator==(VkPipelineDepthStencilStateCreateInfo const &lhs,
+                VkPipelineDepthStencilStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineDepthStencilStateCreateInfo const &lhs,
+                VkPipelineDepthStencilStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkGraphicsPipelineCreateInfo const &lhs,
+                VkGraphicsPipelineCreateInfo const &rhs) noexcept;
+bool operator!=(VkGraphicsPipelineCreateInfo const &lhs,
+                VkGraphicsPipelineCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineCacheCreateInfo const &lhs,
+                VkPipelineCacheCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineCacheCreateInfo const &lhs,
+                VkPipelineCacheCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineCacheHeaderVersionOne const &lhs,
+                VkPipelineCacheHeaderVersionOne const &rhs) noexcept;
+bool operator!=(VkPipelineCacheHeaderVersionOne const &lhs,
+                VkPipelineCacheHeaderVersionOne const &rhs) noexcept;
+
+bool operator==(VkPushConstantRange const &lhs,
+                VkPushConstantRange const &rhs) noexcept;
+bool operator!=(VkPushConstantRange const &lhs,
+                VkPushConstantRange const &rhs) noexcept;
+
+bool operator==(VkPipelineLayoutCreateInfo const &lhs,
+                VkPipelineLayoutCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineLayoutCreateInfo const &lhs,
+                VkPipelineLayoutCreateInfo const &rhs) noexcept;
+
+bool operator==(VkSamplerCreateInfo const &lhs,
+                VkSamplerCreateInfo const &rhs) noexcept;
+bool operator!=(VkSamplerCreateInfo const &lhs,
+                VkSamplerCreateInfo const &rhs) noexcept;
+
+bool operator==(VkCommandPoolCreateInfo const &lhs,
+                VkCommandPoolCreateInfo const &rhs) noexcept;
+bool operator!=(VkCommandPoolCreateInfo const &lhs,
+                VkCommandPoolCreateInfo const &rhs) noexcept;
+
+bool operator==(VkCommandBufferAllocateInfo const &lhs,
+                VkCommandBufferAllocateInfo const &rhs) noexcept;
+bool operator!=(VkCommandBufferAllocateInfo const &lhs,
+                VkCommandBufferAllocateInfo const &rhs) noexcept;
+
+bool operator==(VkCommandBufferInheritanceInfo const &lhs,
+                VkCommandBufferInheritanceInfo const &rhs) noexcept;
+bool operator!=(VkCommandBufferInheritanceInfo const &lhs,
+                VkCommandBufferInheritanceInfo const &rhs) noexcept;
+
+bool operator==(VkCommandBufferBeginInfo const &lhs,
+                VkCommandBufferBeginInfo const &rhs) noexcept;
+bool operator!=(VkCommandBufferBeginInfo const &lhs,
+                VkCommandBufferBeginInfo const &rhs) noexcept;
+
+bool operator==(VkClearDepthStencilValue const &lhs,
+                VkClearDepthStencilValue const &rhs) noexcept;
+bool operator!=(VkClearDepthStencilValue const &lhs,
+                VkClearDepthStencilValue const &rhs) noexcept;
+
+bool operator==(VkAttachmentDescription const &lhs,
+                VkAttachmentDescription const &rhs) noexcept;
+bool operator!=(VkAttachmentDescription const &lhs,
+                VkAttachmentDescription const &rhs) noexcept;
+
+bool operator==(VkAttachmentReference const &lhs,
+                VkAttachmentReference const &rhs) noexcept;
+bool operator!=(VkAttachmentReference const &lhs,
+                VkAttachmentReference const &rhs) noexcept;
+
+bool operator==(VkSubpassDescription const &lhs,
+                VkSubpassDescription const &rhs) noexcept;
+bool operator!=(VkSubpassDescription const &lhs,
+                VkSubpassDescription const &rhs) noexcept;
+
+bool operator==(VkSubpassDependency const &lhs,
+                VkSubpassDependency const &rhs) noexcept;
+bool operator!=(VkSubpassDependency const &lhs,
+                VkSubpassDependency const &rhs) noexcept;
+
+bool operator==(VkRenderPassCreateInfo const &lhs,
+                VkRenderPassCreateInfo const &rhs) noexcept;
+bool operator!=(VkRenderPassCreateInfo const &lhs,
+                VkRenderPassCreateInfo const &rhs) noexcept;
+
+bool operator==(VkEventCreateInfo const &lhs,
+                VkEventCreateInfo const &rhs) noexcept;
+bool operator!=(VkEventCreateInfo const &lhs,
+                VkEventCreateInfo const &rhs) noexcept;
+
+bool operator==(VkFenceCreateInfo const &lhs,
+                VkFenceCreateInfo const &rhs) noexcept;
+bool operator!=(VkFenceCreateInfo const &lhs,
+                VkFenceCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFeatures const &lhs,
+                VkPhysicalDeviceFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFeatures const &lhs,
+                VkPhysicalDeviceFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSparseProperties const &lhs,
+                VkPhysicalDeviceSparseProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSparseProperties const &lhs,
+                VkPhysicalDeviceSparseProperties const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceLimits const &lhs,
+                VkPhysicalDeviceLimits const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceLimits const &lhs,
+                VkPhysicalDeviceLimits const &rhs) noexcept;
+
+bool operator==(VkSemaphoreCreateInfo const &lhs,
+                VkSemaphoreCreateInfo const &rhs) noexcept;
+bool operator!=(VkSemaphoreCreateInfo const &lhs,
+                VkSemaphoreCreateInfo const &rhs) noexcept;
+
+bool operator==(VkQueryPoolCreateInfo const &lhs,
+                VkQueryPoolCreateInfo const &rhs) noexcept;
+bool operator!=(VkQueryPoolCreateInfo const &lhs,
+                VkQueryPoolCreateInfo const &rhs) noexcept;
+
+bool operator==(VkFramebufferCreateInfo const &lhs,
+                VkFramebufferCreateInfo const &rhs) noexcept;
+bool operator!=(VkFramebufferCreateInfo const &lhs,
+                VkFramebufferCreateInfo const &rhs) noexcept;
+
+bool operator==(VkDrawIndirectCommand const &lhs,
+                VkDrawIndirectCommand const &rhs) noexcept;
+bool operator!=(VkDrawIndirectCommand const &lhs,
+                VkDrawIndirectCommand const &rhs) noexcept;
+
+bool operator==(VkDrawIndexedIndirectCommand const &lhs,
+                VkDrawIndexedIndirectCommand const &rhs) noexcept;
+bool operator!=(VkDrawIndexedIndirectCommand const &lhs,
+                VkDrawIndexedIndirectCommand const &rhs) noexcept;
+
+bool operator==(VkDispatchIndirectCommand const &lhs,
+                VkDispatchIndirectCommand const &rhs) noexcept;
+bool operator!=(VkDispatchIndirectCommand const &lhs,
+                VkDispatchIndirectCommand const &rhs) noexcept;
+
+bool operator==(VkMultiDrawInfoEXT const &lhs,
+                VkMultiDrawInfoEXT const &rhs) noexcept;
+bool operator!=(VkMultiDrawInfoEXT const &lhs,
+                VkMultiDrawInfoEXT const &rhs) noexcept;
+
+bool operator==(VkMultiDrawIndexedInfoEXT const &lhs,
+                VkMultiDrawIndexedInfoEXT const &rhs) noexcept;
+bool operator!=(VkMultiDrawIndexedInfoEXT const &lhs,
+                VkMultiDrawIndexedInfoEXT const &rhs) noexcept;
+
+bool operator==(VkSubmitInfo const &lhs,
+                VkSubmitInfo const &rhs) noexcept;
+bool operator!=(VkSubmitInfo const &lhs,
+                VkSubmitInfo const &rhs) noexcept;
+
+bool operator==(VkDisplayPropertiesKHR const &lhs,
+                VkDisplayPropertiesKHR const &rhs) noexcept;
+bool operator!=(VkDisplayPropertiesKHR const &lhs,
+                VkDisplayPropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkDisplayPlanePropertiesKHR const &lhs,
+                VkDisplayPlanePropertiesKHR const &rhs) noexcept;
+bool operator!=(VkDisplayPlanePropertiesKHR const &lhs,
+                VkDisplayPlanePropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkDisplayModeParametersKHR const &lhs,
+                VkDisplayModeParametersKHR const &rhs) noexcept;
+bool operator!=(VkDisplayModeParametersKHR const &lhs,
+                VkDisplayModeParametersKHR const &rhs) noexcept;
+
+bool operator==(VkDisplayModePropertiesKHR const &lhs,
+                VkDisplayModePropertiesKHR const &rhs) noexcept;
+bool operator!=(VkDisplayModePropertiesKHR const &lhs,
+                VkDisplayModePropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkDisplayModeCreateInfoKHR const &lhs,
+                VkDisplayModeCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkDisplayModeCreateInfoKHR const &lhs,
+                VkDisplayModeCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkDisplayPlaneCapabilitiesKHR const &lhs,
+                VkDisplayPlaneCapabilitiesKHR const &rhs) noexcept;
+bool operator!=(VkDisplayPlaneCapabilitiesKHR const &lhs,
+                VkDisplayPlaneCapabilitiesKHR const &rhs) noexcept;
+
+bool operator==(VkDisplaySurfaceCreateInfoKHR const &lhs,
+                VkDisplaySurfaceCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkDisplaySurfaceCreateInfoKHR const &lhs,
+                VkDisplaySurfaceCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkDisplayPresentInfoKHR const &lhs,
+                VkDisplayPresentInfoKHR const &rhs) noexcept;
+bool operator!=(VkDisplayPresentInfoKHR const &lhs,
+                VkDisplayPresentInfoKHR const &rhs) noexcept;
+
+bool operator==(VkSurfaceCapabilitiesKHR const &lhs,
+                VkSurfaceCapabilitiesKHR const &rhs) noexcept;
+bool operator!=(VkSurfaceCapabilitiesKHR const &lhs,
+                VkSurfaceCapabilitiesKHR const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidSurfaceCreateInfoKHR const &lhs,
+                VkAndroidSurfaceCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkAndroidSurfaceCreateInfoKHR const &lhs,
+                VkAndroidSurfaceCreateInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_VI_NN
+bool operator==(VkViSurfaceCreateInfoNN const &lhs,
+                VkViSurfaceCreateInfoNN const &rhs) noexcept;
+bool operator!=(VkViSurfaceCreateInfoNN const &lhs,
+                VkViSurfaceCreateInfoNN const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_VI_NN
+
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+bool operator==(VkWaylandSurfaceCreateInfoKHR const &lhs,
+                VkWaylandSurfaceCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkWaylandSurfaceCreateInfoKHR const &lhs,
+                VkWaylandSurfaceCreateInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WAYLAND_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkWin32SurfaceCreateInfoKHR const &lhs,
+                VkWin32SurfaceCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkWin32SurfaceCreateInfoKHR const &lhs,
+                VkWin32SurfaceCreateInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+bool operator==(VkXlibSurfaceCreateInfoKHR const &lhs,
+                VkXlibSurfaceCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkXlibSurfaceCreateInfoKHR const &lhs,
+                VkXlibSurfaceCreateInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_XLIB_KHR
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+bool operator==(VkXcbSurfaceCreateInfoKHR const &lhs,
+                VkXcbSurfaceCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkXcbSurfaceCreateInfoKHR const &lhs,
+                VkXcbSurfaceCreateInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_XCB_KHR
+
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+bool operator==(VkDirectFBSurfaceCreateInfoEXT const &lhs,
+                VkDirectFBSurfaceCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkDirectFBSurfaceCreateInfoEXT const &lhs,
+                VkDirectFBSurfaceCreateInfoEXT const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_DIRECTFB_EXT
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImagePipeSurfaceCreateInfoFUCHSIA const &lhs,
+                VkImagePipeSurfaceCreateInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkImagePipeSurfaceCreateInfoFUCHSIA const &lhs,
+                VkImagePipeSurfaceCreateInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_GGP
+bool operator==(VkStreamDescriptorSurfaceCreateInfoGGP const &lhs,
+                VkStreamDescriptorSurfaceCreateInfoGGP const &rhs) noexcept;
+bool operator!=(VkStreamDescriptorSurfaceCreateInfoGGP const &lhs,
+                VkStreamDescriptorSurfaceCreateInfoGGP const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_GGP
+
+#ifdef VK_USE_PLATFORM_SCREEN_QNX
+bool operator==(VkScreenSurfaceCreateInfoQNX const &lhs,
+                VkScreenSurfaceCreateInfoQNX const &rhs) noexcept;
+bool operator!=(VkScreenSurfaceCreateInfoQNX const &lhs,
+                VkScreenSurfaceCreateInfoQNX const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_SCREEN_QNX
+
+bool operator==(VkSurfaceFormatKHR const &lhs,
+                VkSurfaceFormatKHR const &rhs) noexcept;
+bool operator!=(VkSurfaceFormatKHR const &lhs,
+                VkSurfaceFormatKHR const &rhs) noexcept;
+
+bool operator==(VkSwapchainCreateInfoKHR const &lhs,
+                VkSwapchainCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkSwapchainCreateInfoKHR const &lhs,
+                VkSwapchainCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPresentInfoKHR const &lhs,
+                VkPresentInfoKHR const &rhs) noexcept;
+bool operator!=(VkPresentInfoKHR const &lhs,
+                VkPresentInfoKHR const &rhs) noexcept;
+
+bool operator==(VkDebugReportCallbackCreateInfoEXT const &lhs,
+                VkDebugReportCallbackCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkDebugReportCallbackCreateInfoEXT const &lhs,
+                VkDebugReportCallbackCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkValidationFlagsEXT const &lhs,
+                VkValidationFlagsEXT const &rhs) noexcept;
+bool operator!=(VkValidationFlagsEXT const &lhs,
+                VkValidationFlagsEXT const &rhs) noexcept;
+
+bool operator==(VkValidationFeaturesEXT const &lhs,
+                VkValidationFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkValidationFeaturesEXT const &lhs,
+                VkValidationFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineRasterizationStateRasterizationOrderAMD const &lhs,
+                VkPipelineRasterizationStateRasterizationOrderAMD const &rhs) noexcept;
+bool operator!=(VkPipelineRasterizationStateRasterizationOrderAMD const &lhs,
+                VkPipelineRasterizationStateRasterizationOrderAMD const &rhs) noexcept;
+
+bool operator==(VkDebugMarkerObjectNameInfoEXT const &lhs,
+                VkDebugMarkerObjectNameInfoEXT const &rhs) noexcept;
+bool operator!=(VkDebugMarkerObjectNameInfoEXT const &lhs,
+                VkDebugMarkerObjectNameInfoEXT const &rhs) noexcept;
+
+bool operator==(VkDebugMarkerObjectTagInfoEXT const &lhs,
+                VkDebugMarkerObjectTagInfoEXT const &rhs) noexcept;
+bool operator!=(VkDebugMarkerObjectTagInfoEXT const &lhs,
+                VkDebugMarkerObjectTagInfoEXT const &rhs) noexcept;
+
+bool operator==(VkDebugMarkerMarkerInfoEXT const &lhs,
+                VkDebugMarkerMarkerInfoEXT const &rhs) noexcept;
+bool operator!=(VkDebugMarkerMarkerInfoEXT const &lhs,
+                VkDebugMarkerMarkerInfoEXT const &rhs) noexcept;
+
+bool operator==(VkDedicatedAllocationImageCreateInfoNV const &lhs,
+                VkDedicatedAllocationImageCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkDedicatedAllocationImageCreateInfoNV const &lhs,
+                VkDedicatedAllocationImageCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkDedicatedAllocationBufferCreateInfoNV const &lhs,
+                VkDedicatedAllocationBufferCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkDedicatedAllocationBufferCreateInfoNV const &lhs,
+                VkDedicatedAllocationBufferCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkDedicatedAllocationMemoryAllocateInfoNV const &lhs,
+                VkDedicatedAllocationMemoryAllocateInfoNV const &rhs) noexcept;
+bool operator!=(VkDedicatedAllocationMemoryAllocateInfoNV const &lhs,
+                VkDedicatedAllocationMemoryAllocateInfoNV const &rhs) noexcept;
+
+bool operator==(VkExternalImageFormatPropertiesNV const &lhs,
+                VkExternalImageFormatPropertiesNV const &rhs) noexcept;
+bool operator!=(VkExternalImageFormatPropertiesNV const &lhs,
+                VkExternalImageFormatPropertiesNV const &rhs) noexcept;
+
+bool operator==(VkExternalMemoryImageCreateInfoNV const &lhs,
+                VkExternalMemoryImageCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkExternalMemoryImageCreateInfoNV const &lhs,
+                VkExternalMemoryImageCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkExportMemoryAllocateInfoNV const &lhs,
+                VkExportMemoryAllocateInfoNV const &rhs) noexcept;
+bool operator!=(VkExportMemoryAllocateInfoNV const &lhs,
+                VkExportMemoryAllocateInfoNV const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkImportMemoryWin32HandleInfoNV const &lhs,
+                VkImportMemoryWin32HandleInfoNV const &rhs) noexcept;
+bool operator!=(VkImportMemoryWin32HandleInfoNV const &lhs,
+                VkImportMemoryWin32HandleInfoNV const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkExportMemoryWin32HandleInfoNV const &lhs,
+                VkExportMemoryWin32HandleInfoNV const &rhs) noexcept;
+bool operator!=(VkExportMemoryWin32HandleInfoNV const &lhs,
+                VkExportMemoryWin32HandleInfoNV const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkWin32KeyedMutexAcquireReleaseInfoNV const &lhs,
+                VkWin32KeyedMutexAcquireReleaseInfoNV const &rhs) noexcept;
+bool operator!=(VkWin32KeyedMutexAcquireReleaseInfoNV const &lhs,
+                VkWin32KeyedMutexAcquireReleaseInfoNV const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &lhs,
+                VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &lhs,
+                VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkDevicePrivateDataCreateInfoEXT const &lhs,
+                VkDevicePrivateDataCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkDevicePrivateDataCreateInfoEXT const &lhs,
+                VkDevicePrivateDataCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPrivateDataSlotCreateInfoEXT const &lhs,
+                VkPrivateDataSlotCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPrivateDataSlotCreateInfoEXT const &lhs,
+                VkPrivateDataSlotCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePrivateDataFeaturesEXT const &lhs,
+                VkPhysicalDevicePrivateDataFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePrivateDataFeaturesEXT const &lhs,
+                VkPhysicalDevicePrivateDataFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &lhs,
+                VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &lhs,
+                VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMultiDrawPropertiesEXT const &lhs,
+                VkPhysicalDeviceMultiDrawPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMultiDrawPropertiesEXT const &lhs,
+                VkPhysicalDeviceMultiDrawPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkGraphicsShaderGroupCreateInfoNV const &lhs,
+                VkGraphicsShaderGroupCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkGraphicsShaderGroupCreateInfoNV const &lhs,
+                VkGraphicsShaderGroupCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkGraphicsPipelineShaderGroupsCreateInfoNV const &lhs,
+                VkGraphicsPipelineShaderGroupsCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkGraphicsPipelineShaderGroupsCreateInfoNV const &lhs,
+                VkGraphicsPipelineShaderGroupsCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkBindShaderGroupIndirectCommandNV const &lhs,
+                VkBindShaderGroupIndirectCommandNV const &rhs) noexcept;
+bool operator!=(VkBindShaderGroupIndirectCommandNV const &lhs,
+                VkBindShaderGroupIndirectCommandNV const &rhs) noexcept;
+
+bool operator==(VkBindIndexBufferIndirectCommandNV const &lhs,
+                VkBindIndexBufferIndirectCommandNV const &rhs) noexcept;
+bool operator!=(VkBindIndexBufferIndirectCommandNV const &lhs,
+                VkBindIndexBufferIndirectCommandNV const &rhs) noexcept;
+
+bool operator==(VkBindVertexBufferIndirectCommandNV const &lhs,
+                VkBindVertexBufferIndirectCommandNV const &rhs) noexcept;
+bool operator!=(VkBindVertexBufferIndirectCommandNV const &lhs,
+                VkBindVertexBufferIndirectCommandNV const &rhs) noexcept;
+
+bool operator==(VkSetStateFlagsIndirectCommandNV const &lhs,
+                VkSetStateFlagsIndirectCommandNV const &rhs) noexcept;
+bool operator!=(VkSetStateFlagsIndirectCommandNV const &lhs,
+                VkSetStateFlagsIndirectCommandNV const &rhs) noexcept;
+
+bool operator==(VkIndirectCommandsStreamNV const &lhs,
+                VkIndirectCommandsStreamNV const &rhs) noexcept;
+bool operator!=(VkIndirectCommandsStreamNV const &lhs,
+                VkIndirectCommandsStreamNV const &rhs) noexcept;
+
+bool operator==(VkIndirectCommandsLayoutTokenNV const &lhs,
+                VkIndirectCommandsLayoutTokenNV const &rhs) noexcept;
+bool operator!=(VkIndirectCommandsLayoutTokenNV const &lhs,
+                VkIndirectCommandsLayoutTokenNV const &rhs) noexcept;
+
+bool operator==(VkIndirectCommandsLayoutCreateInfoNV const &lhs,
+                VkIndirectCommandsLayoutCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkIndirectCommandsLayoutCreateInfoNV const &lhs,
+                VkIndirectCommandsLayoutCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkGeneratedCommandsInfoNV const &lhs,
+                VkGeneratedCommandsInfoNV const &rhs) noexcept;
+bool operator!=(VkGeneratedCommandsInfoNV const &lhs,
+                VkGeneratedCommandsInfoNV const &rhs) noexcept;
+
+bool operator==(VkGeneratedCommandsMemoryRequirementsInfoNV const &lhs,
+                VkGeneratedCommandsMemoryRequirementsInfoNV const &rhs) noexcept;
+bool operator!=(VkGeneratedCommandsMemoryRequirementsInfoNV const &lhs,
+                VkGeneratedCommandsMemoryRequirementsInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFeatures2 const &lhs,
+                VkPhysicalDeviceFeatures2 const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFeatures2 const &lhs,
+                VkPhysicalDeviceFeatures2 const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceProperties2 const &lhs,
+                VkPhysicalDeviceProperties2 const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceProperties2 const &lhs,
+                VkPhysicalDeviceProperties2 const &rhs) noexcept;
+
+bool operator==(VkFormatProperties2 const &lhs,
+                VkFormatProperties2 const &rhs) noexcept;
+bool operator!=(VkFormatProperties2 const &lhs,
+                VkFormatProperties2 const &rhs) noexcept;
+
+bool operator==(VkImageFormatProperties2 const &lhs,
+                VkImageFormatProperties2 const &rhs) noexcept;
+bool operator!=(VkImageFormatProperties2 const &lhs,
+                VkImageFormatProperties2 const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceImageFormatInfo2 const &lhs,
+                VkPhysicalDeviceImageFormatInfo2 const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceImageFormatInfo2 const &lhs,
+                VkPhysicalDeviceImageFormatInfo2 const &rhs) noexcept;
+
+bool operator==(VkQueueFamilyProperties2 const &lhs,
+                VkQueueFamilyProperties2 const &rhs) noexcept;
+bool operator!=(VkQueueFamilyProperties2 const &lhs,
+                VkQueueFamilyProperties2 const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMemoryProperties2 const &lhs,
+                VkPhysicalDeviceMemoryProperties2 const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMemoryProperties2 const &lhs,
+                VkPhysicalDeviceMemoryProperties2 const &rhs) noexcept;
+
+bool operator==(VkSparseImageFormatProperties2 const &lhs,
+                VkSparseImageFormatProperties2 const &rhs) noexcept;
+bool operator!=(VkSparseImageFormatProperties2 const &lhs,
+                VkSparseImageFormatProperties2 const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSparseImageFormatInfo2 const &lhs,
+                VkPhysicalDeviceSparseImageFormatInfo2 const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSparseImageFormatInfo2 const &lhs,
+                VkPhysicalDeviceSparseImageFormatInfo2 const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePushDescriptorPropertiesKHR const &lhs,
+                VkPhysicalDevicePushDescriptorPropertiesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePushDescriptorPropertiesKHR const &lhs,
+                VkPhysicalDevicePushDescriptorPropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkConformanceVersion const &lhs,
+                VkConformanceVersion const &rhs) noexcept;
+bool operator!=(VkConformanceVersion const &lhs,
+                VkConformanceVersion const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDriverProperties const &lhs,
+                VkPhysicalDeviceDriverProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDriverProperties const &lhs,
+                VkPhysicalDeviceDriverProperties const &rhs) noexcept;
+
+bool operator==(VkPresentRegionsKHR const &lhs,
+                VkPresentRegionsKHR const &rhs) noexcept;
+bool operator!=(VkPresentRegionsKHR const &lhs,
+                VkPresentRegionsKHR const &rhs) noexcept;
+
+bool operator==(VkPresentRegionKHR const &lhs,
+                VkPresentRegionKHR const &rhs) noexcept;
+bool operator!=(VkPresentRegionKHR const &lhs,
+                VkPresentRegionKHR const &rhs) noexcept;
+
+bool operator==(VkRectLayerKHR const &lhs,
+                VkRectLayerKHR const &rhs) noexcept;
+bool operator!=(VkRectLayerKHR const &lhs,
+                VkRectLayerKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceVariablePointersFeatures const &lhs,
+                VkPhysicalDeviceVariablePointersFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVariablePointersFeatures const &lhs,
+                VkPhysicalDeviceVariablePointersFeatures const &rhs) noexcept;
+
+bool operator==(VkExternalMemoryProperties const &lhs,
+                VkExternalMemoryProperties const &rhs) noexcept;
+bool operator!=(VkExternalMemoryProperties const &lhs,
+                VkExternalMemoryProperties const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceExternalImageFormatInfo const &lhs,
+                VkPhysicalDeviceExternalImageFormatInfo const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceExternalImageFormatInfo const &lhs,
+                VkPhysicalDeviceExternalImageFormatInfo const &rhs) noexcept;
+
+bool operator==(VkExternalImageFormatProperties const &lhs,
+                VkExternalImageFormatProperties const &rhs) noexcept;
+bool operator!=(VkExternalImageFormatProperties const &lhs,
+                VkExternalImageFormatProperties const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceExternalBufferInfo const &lhs,
+                VkPhysicalDeviceExternalBufferInfo const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceExternalBufferInfo const &lhs,
+                VkPhysicalDeviceExternalBufferInfo const &rhs) noexcept;
+
+bool operator==(VkExternalBufferProperties const &lhs,
+                VkExternalBufferProperties const &rhs) noexcept;
+bool operator!=(VkExternalBufferProperties const &lhs,
+                VkExternalBufferProperties const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceIDProperties const &lhs,
+                VkPhysicalDeviceIDProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceIDProperties const &lhs,
+                VkPhysicalDeviceIDProperties const &rhs) noexcept;
+
+bool operator==(VkExternalMemoryImageCreateInfo const &lhs,
+                VkExternalMemoryImageCreateInfo const &rhs) noexcept;
+bool operator!=(VkExternalMemoryImageCreateInfo const &lhs,
+                VkExternalMemoryImageCreateInfo const &rhs) noexcept;
+
+bool operator==(VkExternalMemoryBufferCreateInfo const &lhs,
+                VkExternalMemoryBufferCreateInfo const &rhs) noexcept;
+bool operator!=(VkExternalMemoryBufferCreateInfo const &lhs,
+                VkExternalMemoryBufferCreateInfo const &rhs) noexcept;
+
+bool operator==(VkExportMemoryAllocateInfo const &lhs,
+                VkExportMemoryAllocateInfo const &rhs) noexcept;
+bool operator!=(VkExportMemoryAllocateInfo const &lhs,
+                VkExportMemoryAllocateInfo const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkImportMemoryWin32HandleInfoKHR const &lhs,
+                VkImportMemoryWin32HandleInfoKHR const &rhs) noexcept;
+bool operator!=(VkImportMemoryWin32HandleInfoKHR const &lhs,
+                VkImportMemoryWin32HandleInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkExportMemoryWin32HandleInfoKHR const &lhs,
+                VkExportMemoryWin32HandleInfoKHR const &rhs) noexcept;
+bool operator!=(VkExportMemoryWin32HandleInfoKHR const &lhs,
+                VkExportMemoryWin32HandleInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImportMemoryZirconHandleInfoFUCHSIA const &lhs,
+                VkImportMemoryZirconHandleInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkImportMemoryZirconHandleInfoFUCHSIA const &lhs,
+                VkImportMemoryZirconHandleInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkMemoryZirconHandlePropertiesFUCHSIA const &lhs,
+                VkMemoryZirconHandlePropertiesFUCHSIA const &rhs) noexcept;
+bool operator!=(VkMemoryZirconHandlePropertiesFUCHSIA const &lhs,
+                VkMemoryZirconHandlePropertiesFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkMemoryGetZirconHandleInfoFUCHSIA const &lhs,
+                VkMemoryGetZirconHandleInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkMemoryGetZirconHandleInfoFUCHSIA const &lhs,
+                VkMemoryGetZirconHandleInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkMemoryWin32HandlePropertiesKHR const &lhs,
+                VkMemoryWin32HandlePropertiesKHR const &rhs) noexcept;
+bool operator!=(VkMemoryWin32HandlePropertiesKHR const &lhs,
+                VkMemoryWin32HandlePropertiesKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkMemoryGetWin32HandleInfoKHR const &lhs,
+                VkMemoryGetWin32HandleInfoKHR const &rhs) noexcept;
+bool operator!=(VkMemoryGetWin32HandleInfoKHR const &lhs,
+                VkMemoryGetWin32HandleInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkImportMemoryFdInfoKHR const &lhs,
+                VkImportMemoryFdInfoKHR const &rhs) noexcept;
+bool operator!=(VkImportMemoryFdInfoKHR const &lhs,
+                VkImportMemoryFdInfoKHR const &rhs) noexcept;
+
+bool operator==(VkMemoryFdPropertiesKHR const &lhs,
+                VkMemoryFdPropertiesKHR const &rhs) noexcept;
+bool operator!=(VkMemoryFdPropertiesKHR const &lhs,
+                VkMemoryFdPropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkMemoryGetFdInfoKHR const &lhs,
+                VkMemoryGetFdInfoKHR const &rhs) noexcept;
+bool operator!=(VkMemoryGetFdInfoKHR const &lhs,
+                VkMemoryGetFdInfoKHR const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkWin32KeyedMutexAcquireReleaseInfoKHR const &lhs,
+                VkWin32KeyedMutexAcquireReleaseInfoKHR const &rhs) noexcept;
+bool operator!=(VkWin32KeyedMutexAcquireReleaseInfoKHR const &lhs,
+                VkWin32KeyedMutexAcquireReleaseInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkPhysicalDeviceExternalSemaphoreInfo const &lhs,
+                VkPhysicalDeviceExternalSemaphoreInfo const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceExternalSemaphoreInfo const &lhs,
+                VkPhysicalDeviceExternalSemaphoreInfo const &rhs) noexcept;
+
+bool operator==(VkExternalSemaphoreProperties const &lhs,
+                VkExternalSemaphoreProperties const &rhs) noexcept;
+bool operator!=(VkExternalSemaphoreProperties const &lhs,
+                VkExternalSemaphoreProperties const &rhs) noexcept;
+
+bool operator==(VkExportSemaphoreCreateInfo const &lhs,
+                VkExportSemaphoreCreateInfo const &rhs) noexcept;
+bool operator!=(VkExportSemaphoreCreateInfo const &lhs,
+                VkExportSemaphoreCreateInfo const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkImportSemaphoreWin32HandleInfoKHR const &lhs,
+                VkImportSemaphoreWin32HandleInfoKHR const &rhs) noexcept;
+bool operator!=(VkImportSemaphoreWin32HandleInfoKHR const &lhs,
+                VkImportSemaphoreWin32HandleInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkExportSemaphoreWin32HandleInfoKHR const &lhs,
+                VkExportSemaphoreWin32HandleInfoKHR const &rhs) noexcept;
+bool operator!=(VkExportSemaphoreWin32HandleInfoKHR const &lhs,
+                VkExportSemaphoreWin32HandleInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkD3D12FenceSubmitInfoKHR const &lhs,
+                VkD3D12FenceSubmitInfoKHR const &rhs) noexcept;
+bool operator!=(VkD3D12FenceSubmitInfoKHR const &lhs,
+                VkD3D12FenceSubmitInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkSemaphoreGetWin32HandleInfoKHR const &lhs,
+                VkSemaphoreGetWin32HandleInfoKHR const &rhs) noexcept;
+bool operator!=(VkSemaphoreGetWin32HandleInfoKHR const &lhs,
+                VkSemaphoreGetWin32HandleInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkImportSemaphoreFdInfoKHR const &lhs,
+                VkImportSemaphoreFdInfoKHR const &rhs) noexcept;
+bool operator!=(VkImportSemaphoreFdInfoKHR const &lhs,
+                VkImportSemaphoreFdInfoKHR const &rhs) noexcept;
+
+bool operator==(VkSemaphoreGetFdInfoKHR const &lhs,
+                VkSemaphoreGetFdInfoKHR const &rhs) noexcept;
+bool operator!=(VkSemaphoreGetFdInfoKHR const &lhs,
+                VkSemaphoreGetFdInfoKHR const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImportSemaphoreZirconHandleInfoFUCHSIA const &lhs,
+                VkImportSemaphoreZirconHandleInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkImportSemaphoreZirconHandleInfoFUCHSIA const &lhs,
+                VkImportSemaphoreZirconHandleInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkSemaphoreGetZirconHandleInfoFUCHSIA const &lhs,
+                VkSemaphoreGetZirconHandleInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkSemaphoreGetZirconHandleInfoFUCHSIA const &lhs,
+                VkSemaphoreGetZirconHandleInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+bool operator==(VkPhysicalDeviceExternalFenceInfo const &lhs,
+                VkPhysicalDeviceExternalFenceInfo const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceExternalFenceInfo const &lhs,
+                VkPhysicalDeviceExternalFenceInfo const &rhs) noexcept;
+
+bool operator==(VkExternalFenceProperties const &lhs,
+                VkExternalFenceProperties const &rhs) noexcept;
+bool operator!=(VkExternalFenceProperties const &lhs,
+                VkExternalFenceProperties const &rhs) noexcept;
+
+bool operator==(VkExportFenceCreateInfo const &lhs,
+                VkExportFenceCreateInfo const &rhs) noexcept;
+bool operator!=(VkExportFenceCreateInfo const &lhs,
+                VkExportFenceCreateInfo const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkImportFenceWin32HandleInfoKHR const &lhs,
+                VkImportFenceWin32HandleInfoKHR const &rhs) noexcept;
+bool operator!=(VkImportFenceWin32HandleInfoKHR const &lhs,
+                VkImportFenceWin32HandleInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkExportFenceWin32HandleInfoKHR const &lhs,
+                VkExportFenceWin32HandleInfoKHR const &rhs) noexcept;
+bool operator!=(VkExportFenceWin32HandleInfoKHR const &lhs,
+                VkExportFenceWin32HandleInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkFenceGetWin32HandleInfoKHR const &lhs,
+                VkFenceGetWin32HandleInfoKHR const &rhs) noexcept;
+bool operator!=(VkFenceGetWin32HandleInfoKHR const &lhs,
+                VkFenceGetWin32HandleInfoKHR const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkImportFenceFdInfoKHR const &lhs,
+                VkImportFenceFdInfoKHR const &rhs) noexcept;
+bool operator!=(VkImportFenceFdInfoKHR const &lhs,
+                VkImportFenceFdInfoKHR const &rhs) noexcept;
+
+bool operator==(VkFenceGetFdInfoKHR const &lhs,
+                VkFenceGetFdInfoKHR const &rhs) noexcept;
+bool operator!=(VkFenceGetFdInfoKHR const &lhs,
+                VkFenceGetFdInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMultiviewFeatures const &lhs,
+                VkPhysicalDeviceMultiviewFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMultiviewFeatures const &lhs,
+                VkPhysicalDeviceMultiviewFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMultiviewProperties const &lhs,
+                VkPhysicalDeviceMultiviewProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMultiviewProperties const &lhs,
+                VkPhysicalDeviceMultiviewProperties const &rhs) noexcept;
+
+bool operator==(VkRenderPassMultiviewCreateInfo const &lhs,
+                VkRenderPassMultiviewCreateInfo const &rhs) noexcept;
+bool operator!=(VkRenderPassMultiviewCreateInfo const &lhs,
+                VkRenderPassMultiviewCreateInfo const &rhs) noexcept;
+
+bool operator==(VkSurfaceCapabilities2EXT const &lhs,
+                VkSurfaceCapabilities2EXT const &rhs) noexcept;
+bool operator!=(VkSurfaceCapabilities2EXT const &lhs,
+                VkSurfaceCapabilities2EXT const &rhs) noexcept;
+
+bool operator==(VkDisplayPowerInfoEXT const &lhs,
+                VkDisplayPowerInfoEXT const &rhs) noexcept;
+bool operator!=(VkDisplayPowerInfoEXT const &lhs,
+                VkDisplayPowerInfoEXT const &rhs) noexcept;
+
+bool operator==(VkDeviceEventInfoEXT const &lhs,
+                VkDeviceEventInfoEXT const &rhs) noexcept;
+bool operator!=(VkDeviceEventInfoEXT const &lhs,
+                VkDeviceEventInfoEXT const &rhs) noexcept;
+
+bool operator==(VkDisplayEventInfoEXT const &lhs,
+                VkDisplayEventInfoEXT const &rhs) noexcept;
+bool operator!=(VkDisplayEventInfoEXT const &lhs,
+                VkDisplayEventInfoEXT const &rhs) noexcept;
+
+bool operator==(VkSwapchainCounterCreateInfoEXT const &lhs,
+                VkSwapchainCounterCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkSwapchainCounterCreateInfoEXT const &lhs,
+                VkSwapchainCounterCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceGroupProperties const &lhs,
+                VkPhysicalDeviceGroupProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceGroupProperties const &lhs,
+                VkPhysicalDeviceGroupProperties const &rhs) noexcept;
+
+bool operator==(VkMemoryAllocateFlagsInfo const &lhs,
+                VkMemoryAllocateFlagsInfo const &rhs) noexcept;
+bool operator!=(VkMemoryAllocateFlagsInfo const &lhs,
+                VkMemoryAllocateFlagsInfo const &rhs) noexcept;
+
+bool operator==(VkBindBufferMemoryInfo const &lhs,
+                VkBindBufferMemoryInfo const &rhs) noexcept;
+bool operator!=(VkBindBufferMemoryInfo const &lhs,
+                VkBindBufferMemoryInfo const &rhs) noexcept;
+
+bool operator==(VkBindBufferMemoryDeviceGroupInfo const &lhs,
+                VkBindBufferMemoryDeviceGroupInfo const &rhs) noexcept;
+bool operator!=(VkBindBufferMemoryDeviceGroupInfo const &lhs,
+                VkBindBufferMemoryDeviceGroupInfo const &rhs) noexcept;
+
+bool operator==(VkBindImageMemoryInfo const &lhs,
+                VkBindImageMemoryInfo const &rhs) noexcept;
+bool operator!=(VkBindImageMemoryInfo const &lhs,
+                VkBindImageMemoryInfo const &rhs) noexcept;
+
+bool operator==(VkBindImageMemoryDeviceGroupInfo const &lhs,
+                VkBindImageMemoryDeviceGroupInfo const &rhs) noexcept;
+bool operator!=(VkBindImageMemoryDeviceGroupInfo const &lhs,
+                VkBindImageMemoryDeviceGroupInfo const &rhs) noexcept;
+
+bool operator==(VkDeviceGroupRenderPassBeginInfo const &lhs,
+                VkDeviceGroupRenderPassBeginInfo const &rhs) noexcept;
+bool operator!=(VkDeviceGroupRenderPassBeginInfo const &lhs,
+                VkDeviceGroupRenderPassBeginInfo const &rhs) noexcept;
+
+bool operator==(VkDeviceGroupCommandBufferBeginInfo const &lhs,
+                VkDeviceGroupCommandBufferBeginInfo const &rhs) noexcept;
+bool operator!=(VkDeviceGroupCommandBufferBeginInfo const &lhs,
+                VkDeviceGroupCommandBufferBeginInfo const &rhs) noexcept;
+
+bool operator==(VkDeviceGroupSubmitInfo const &lhs,
+                VkDeviceGroupSubmitInfo const &rhs) noexcept;
+bool operator!=(VkDeviceGroupSubmitInfo const &lhs,
+                VkDeviceGroupSubmitInfo const &rhs) noexcept;
+
+bool operator==(VkDeviceGroupBindSparseInfo const &lhs,
+                VkDeviceGroupBindSparseInfo const &rhs) noexcept;
+bool operator!=(VkDeviceGroupBindSparseInfo const &lhs,
+                VkDeviceGroupBindSparseInfo const &rhs) noexcept;
+
+bool operator==(VkDeviceGroupPresentCapabilitiesKHR const &lhs,
+                VkDeviceGroupPresentCapabilitiesKHR const &rhs) noexcept;
+bool operator!=(VkDeviceGroupPresentCapabilitiesKHR const &lhs,
+                VkDeviceGroupPresentCapabilitiesKHR const &rhs) noexcept;
+
+bool operator==(VkImageSwapchainCreateInfoKHR const &lhs,
+                VkImageSwapchainCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkImageSwapchainCreateInfoKHR const &lhs,
+                VkImageSwapchainCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkBindImageMemorySwapchainInfoKHR const &lhs,
+                VkBindImageMemorySwapchainInfoKHR const &rhs) noexcept;
+bool operator!=(VkBindImageMemorySwapchainInfoKHR const &lhs,
+                VkBindImageMemorySwapchainInfoKHR const &rhs) noexcept;
+
+bool operator==(VkAcquireNextImageInfoKHR const &lhs,
+                VkAcquireNextImageInfoKHR const &rhs) noexcept;
+bool operator!=(VkAcquireNextImageInfoKHR const &lhs,
+                VkAcquireNextImageInfoKHR const &rhs) noexcept;
+
+bool operator==(VkDeviceGroupPresentInfoKHR const &lhs,
+                VkDeviceGroupPresentInfoKHR const &rhs) noexcept;
+bool operator!=(VkDeviceGroupPresentInfoKHR const &lhs,
+                VkDeviceGroupPresentInfoKHR const &rhs) noexcept;
+
+bool operator==(VkDeviceGroupDeviceCreateInfo const &lhs,
+                VkDeviceGroupDeviceCreateInfo const &rhs) noexcept;
+bool operator!=(VkDeviceGroupDeviceCreateInfo const &lhs,
+                VkDeviceGroupDeviceCreateInfo const &rhs) noexcept;
+
+bool operator==(VkDeviceGroupSwapchainCreateInfoKHR const &lhs,
+                VkDeviceGroupSwapchainCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkDeviceGroupSwapchainCreateInfoKHR const &lhs,
+                VkDeviceGroupSwapchainCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkDescriptorUpdateTemplateEntry const &lhs,
+                VkDescriptorUpdateTemplateEntry const &rhs) noexcept;
+bool operator!=(VkDescriptorUpdateTemplateEntry const &lhs,
+                VkDescriptorUpdateTemplateEntry const &rhs) noexcept;
+
+bool operator==(VkDescriptorUpdateTemplateCreateInfo const &lhs,
+                VkDescriptorUpdateTemplateCreateInfo const &rhs) noexcept;
+bool operator!=(VkDescriptorUpdateTemplateCreateInfo const &lhs,
+                VkDescriptorUpdateTemplateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkXYColorEXT const &lhs,
+                VkXYColorEXT const &rhs) noexcept;
+bool operator!=(VkXYColorEXT const &lhs,
+                VkXYColorEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePresentIdFeaturesKHR const &lhs,
+                VkPhysicalDevicePresentIdFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePresentIdFeaturesKHR const &lhs,
+                VkPhysicalDevicePresentIdFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPresentIdKHR const &lhs,
+                VkPresentIdKHR const &rhs) noexcept;
+bool operator!=(VkPresentIdKHR const &lhs,
+                VkPresentIdKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePresentWaitFeaturesKHR const &lhs,
+                VkPhysicalDevicePresentWaitFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePresentWaitFeaturesKHR const &lhs,
+                VkPhysicalDevicePresentWaitFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkHdrMetadataEXT const &lhs,
+                VkHdrMetadataEXT const &rhs) noexcept;
+bool operator!=(VkHdrMetadataEXT const &lhs,
+                VkHdrMetadataEXT const &rhs) noexcept;
+
+bool operator==(VkDisplayNativeHdrSurfaceCapabilitiesAMD const &lhs,
+                VkDisplayNativeHdrSurfaceCapabilitiesAMD const &rhs) noexcept;
+bool operator!=(VkDisplayNativeHdrSurfaceCapabilitiesAMD const &lhs,
+                VkDisplayNativeHdrSurfaceCapabilitiesAMD const &rhs) noexcept;
+
+bool operator==(VkSwapchainDisplayNativeHdrCreateInfoAMD const &lhs,
+                VkSwapchainDisplayNativeHdrCreateInfoAMD const &rhs) noexcept;
+bool operator!=(VkSwapchainDisplayNativeHdrCreateInfoAMD const &lhs,
+                VkSwapchainDisplayNativeHdrCreateInfoAMD const &rhs) noexcept;
+
+bool operator==(VkRefreshCycleDurationGOOGLE const &lhs,
+                VkRefreshCycleDurationGOOGLE const &rhs) noexcept;
+bool operator!=(VkRefreshCycleDurationGOOGLE const &lhs,
+                VkRefreshCycleDurationGOOGLE const &rhs) noexcept;
+
+bool operator==(VkPastPresentationTimingGOOGLE const &lhs,
+                VkPastPresentationTimingGOOGLE const &rhs) noexcept;
+bool operator!=(VkPastPresentationTimingGOOGLE const &lhs,
+                VkPastPresentationTimingGOOGLE const &rhs) noexcept;
+
+bool operator==(VkPresentTimesInfoGOOGLE const &lhs,
+                VkPresentTimesInfoGOOGLE const &rhs) noexcept;
+bool operator!=(VkPresentTimesInfoGOOGLE const &lhs,
+                VkPresentTimesInfoGOOGLE const &rhs) noexcept;
+
+bool operator==(VkPresentTimeGOOGLE const &lhs,
+                VkPresentTimeGOOGLE const &rhs) noexcept;
+bool operator!=(VkPresentTimeGOOGLE const &lhs,
+                VkPresentTimeGOOGLE const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_IOS_MVK
+bool operator==(VkIOSSurfaceCreateInfoMVK const &lhs,
+                VkIOSSurfaceCreateInfoMVK const &rhs) noexcept;
+bool operator!=(VkIOSSurfaceCreateInfoMVK const &lhs,
+                VkIOSSurfaceCreateInfoMVK const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_IOS_MVK
+
+#ifdef VK_USE_PLATFORM_MACOS_MVK
+bool operator==(VkMacOSSurfaceCreateInfoMVK const &lhs,
+                VkMacOSSurfaceCreateInfoMVK const &rhs) noexcept;
+bool operator!=(VkMacOSSurfaceCreateInfoMVK const &lhs,
+                VkMacOSSurfaceCreateInfoMVK const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_MACOS_MVK
+
+#ifdef VK_USE_PLATFORM_METAL_EXT
+bool operator==(VkMetalSurfaceCreateInfoEXT const &lhs,
+                VkMetalSurfaceCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkMetalSurfaceCreateInfoEXT const &lhs,
+                VkMetalSurfaceCreateInfoEXT const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_METAL_EXT
+
+bool operator==(VkViewportWScalingNV const &lhs,
+                VkViewportWScalingNV const &rhs) noexcept;
+bool operator!=(VkViewportWScalingNV const &lhs,
+                VkViewportWScalingNV const &rhs) noexcept;
+
+bool operator==(VkPipelineViewportWScalingStateCreateInfoNV const &lhs,
+                VkPipelineViewportWScalingStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineViewportWScalingStateCreateInfoNV const &lhs,
+                VkPipelineViewportWScalingStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkViewportSwizzleNV const &lhs,
+                VkViewportSwizzleNV const &rhs) noexcept;
+bool operator!=(VkViewportSwizzleNV const &lhs,
+                VkViewportSwizzleNV const &rhs) noexcept;
+
+bool operator==(VkPipelineViewportSwizzleStateCreateInfoNV const &lhs,
+                VkPipelineViewportSwizzleStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineViewportSwizzleStateCreateInfoNV const &lhs,
+                VkPipelineViewportSwizzleStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDiscardRectanglePropertiesEXT const &lhs,
+                VkPhysicalDeviceDiscardRectanglePropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDiscardRectanglePropertiesEXT const &lhs,
+                VkPhysicalDeviceDiscardRectanglePropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineDiscardRectangleStateCreateInfoEXT const &lhs,
+                VkPipelineDiscardRectangleStateCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineDiscardRectangleStateCreateInfoEXT const &lhs,
+                VkPipelineDiscardRectangleStateCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &lhs,
+                VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &lhs,
+                VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &rhs) noexcept;
+
+bool operator==(VkInputAttachmentAspectReference const &lhs,
+                VkInputAttachmentAspectReference const &rhs) noexcept;
+bool operator!=(VkInputAttachmentAspectReference const &lhs,
+                VkInputAttachmentAspectReference const &rhs) noexcept;
+
+bool operator==(VkRenderPassInputAttachmentAspectCreateInfo const &lhs,
+                VkRenderPassInputAttachmentAspectCreateInfo const &rhs) noexcept;
+bool operator!=(VkRenderPassInputAttachmentAspectCreateInfo const &lhs,
+                VkRenderPassInputAttachmentAspectCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSurfaceInfo2KHR const &lhs,
+                VkPhysicalDeviceSurfaceInfo2KHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSurfaceInfo2KHR const &lhs,
+                VkPhysicalDeviceSurfaceInfo2KHR const &rhs) noexcept;
+
+bool operator==(VkSurfaceCapabilities2KHR const &lhs,
+                VkSurfaceCapabilities2KHR const &rhs) noexcept;
+bool operator!=(VkSurfaceCapabilities2KHR const &lhs,
+                VkSurfaceCapabilities2KHR const &rhs) noexcept;
+
+bool operator==(VkSurfaceFormat2KHR const &lhs,
+                VkSurfaceFormat2KHR const &rhs) noexcept;
+bool operator!=(VkSurfaceFormat2KHR const &lhs,
+                VkSurfaceFormat2KHR const &rhs) noexcept;
+
+bool operator==(VkDisplayProperties2KHR const &lhs,
+                VkDisplayProperties2KHR const &rhs) noexcept;
+bool operator!=(VkDisplayProperties2KHR const &lhs,
+                VkDisplayProperties2KHR const &rhs) noexcept;
+
+bool operator==(VkDisplayPlaneProperties2KHR const &lhs,
+                VkDisplayPlaneProperties2KHR const &rhs) noexcept;
+bool operator!=(VkDisplayPlaneProperties2KHR const &lhs,
+                VkDisplayPlaneProperties2KHR const &rhs) noexcept;
+
+bool operator==(VkDisplayModeProperties2KHR const &lhs,
+                VkDisplayModeProperties2KHR const &rhs) noexcept;
+bool operator!=(VkDisplayModeProperties2KHR const &lhs,
+                VkDisplayModeProperties2KHR const &rhs) noexcept;
+
+bool operator==(VkDisplayPlaneInfo2KHR const &lhs,
+                VkDisplayPlaneInfo2KHR const &rhs) noexcept;
+bool operator!=(VkDisplayPlaneInfo2KHR const &lhs,
+                VkDisplayPlaneInfo2KHR const &rhs) noexcept;
+
+bool operator==(VkDisplayPlaneCapabilities2KHR const &lhs,
+                VkDisplayPlaneCapabilities2KHR const &rhs) noexcept;
+bool operator!=(VkDisplayPlaneCapabilities2KHR const &lhs,
+                VkDisplayPlaneCapabilities2KHR const &rhs) noexcept;
+
+bool operator==(VkSharedPresentSurfaceCapabilitiesKHR const &lhs,
+                VkSharedPresentSurfaceCapabilitiesKHR const &rhs) noexcept;
+bool operator!=(VkSharedPresentSurfaceCapabilitiesKHR const &lhs,
+                VkSharedPresentSurfaceCapabilitiesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevice16BitStorageFeatures const &lhs,
+                VkPhysicalDevice16BitStorageFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDevice16BitStorageFeatures const &lhs,
+                VkPhysicalDevice16BitStorageFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSubgroupProperties const &lhs,
+                VkPhysicalDeviceSubgroupProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSubgroupProperties const &lhs,
+                VkPhysicalDeviceSubgroupProperties const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &lhs,
+                VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &lhs,
+                VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &rhs) noexcept;
+
+bool operator==(VkBufferMemoryRequirementsInfo2 const &lhs,
+                VkBufferMemoryRequirementsInfo2 const &rhs) noexcept;
+bool operator!=(VkBufferMemoryRequirementsInfo2 const &lhs,
+                VkBufferMemoryRequirementsInfo2 const &rhs) noexcept;
+
+bool operator==(VkDeviceBufferMemoryRequirementsKHR const &lhs,
+                VkDeviceBufferMemoryRequirementsKHR const &rhs) noexcept;
+bool operator!=(VkDeviceBufferMemoryRequirementsKHR const &lhs,
+                VkDeviceBufferMemoryRequirementsKHR const &rhs) noexcept;
+
+bool operator==(VkImageMemoryRequirementsInfo2 const &lhs,
+                VkImageMemoryRequirementsInfo2 const &rhs) noexcept;
+bool operator!=(VkImageMemoryRequirementsInfo2 const &lhs,
+                VkImageMemoryRequirementsInfo2 const &rhs) noexcept;
+
+bool operator==(VkImageSparseMemoryRequirementsInfo2 const &lhs,
+                VkImageSparseMemoryRequirementsInfo2 const &rhs) noexcept;
+bool operator!=(VkImageSparseMemoryRequirementsInfo2 const &lhs,
+                VkImageSparseMemoryRequirementsInfo2 const &rhs) noexcept;
+
+bool operator==(VkDeviceImageMemoryRequirementsKHR const &lhs,
+                VkDeviceImageMemoryRequirementsKHR const &rhs) noexcept;
+bool operator!=(VkDeviceImageMemoryRequirementsKHR const &lhs,
+                VkDeviceImageMemoryRequirementsKHR const &rhs) noexcept;
+
+bool operator==(VkMemoryRequirements2 const &lhs,
+                VkMemoryRequirements2 const &rhs) noexcept;
+bool operator!=(VkMemoryRequirements2 const &lhs,
+                VkMemoryRequirements2 const &rhs) noexcept;
+
+bool operator==(VkSparseImageMemoryRequirements2 const &lhs,
+                VkSparseImageMemoryRequirements2 const &rhs) noexcept;
+bool operator!=(VkSparseImageMemoryRequirements2 const &lhs,
+                VkSparseImageMemoryRequirements2 const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePointClippingProperties const &lhs,
+                VkPhysicalDevicePointClippingProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePointClippingProperties const &lhs,
+                VkPhysicalDevicePointClippingProperties const &rhs) noexcept;
+
+bool operator==(VkMemoryDedicatedRequirements const &lhs,
+                VkMemoryDedicatedRequirements const &rhs) noexcept;
+bool operator!=(VkMemoryDedicatedRequirements const &lhs,
+                VkMemoryDedicatedRequirements const &rhs) noexcept;
+
+bool operator==(VkMemoryDedicatedAllocateInfo const &lhs,
+                VkMemoryDedicatedAllocateInfo const &rhs) noexcept;
+bool operator!=(VkMemoryDedicatedAllocateInfo const &lhs,
+                VkMemoryDedicatedAllocateInfo const &rhs) noexcept;
+
+bool operator==(VkImageViewUsageCreateInfo const &lhs,
+                VkImageViewUsageCreateInfo const &rhs) noexcept;
+bool operator!=(VkImageViewUsageCreateInfo const &lhs,
+                VkImageViewUsageCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPipelineTessellationDomainOriginStateCreateInfo const &lhs,
+                VkPipelineTessellationDomainOriginStateCreateInfo const &rhs) noexcept;
+bool operator!=(VkPipelineTessellationDomainOriginStateCreateInfo const &lhs,
+                VkPipelineTessellationDomainOriginStateCreateInfo const &rhs) noexcept;
+
+bool operator==(VkSamplerYcbcrConversionInfo const &lhs,
+                VkSamplerYcbcrConversionInfo const &rhs) noexcept;
+bool operator!=(VkSamplerYcbcrConversionInfo const &lhs,
+                VkSamplerYcbcrConversionInfo const &rhs) noexcept;
+
+bool operator==(VkSamplerYcbcrConversionCreateInfo const &lhs,
+                VkSamplerYcbcrConversionCreateInfo const &rhs) noexcept;
+bool operator!=(VkSamplerYcbcrConversionCreateInfo const &lhs,
+                VkSamplerYcbcrConversionCreateInfo const &rhs) noexcept;
+
+bool operator==(VkBindImagePlaneMemoryInfo const &lhs,
+                VkBindImagePlaneMemoryInfo const &rhs) noexcept;
+bool operator!=(VkBindImagePlaneMemoryInfo const &lhs,
+                VkBindImagePlaneMemoryInfo const &rhs) noexcept;
+
+bool operator==(VkImagePlaneMemoryRequirementsInfo const &lhs,
+                VkImagePlaneMemoryRequirementsInfo const &rhs) noexcept;
+bool operator!=(VkImagePlaneMemoryRequirementsInfo const &lhs,
+                VkImagePlaneMemoryRequirementsInfo const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSamplerYcbcrConversionFeatures const &lhs,
+                VkPhysicalDeviceSamplerYcbcrConversionFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSamplerYcbcrConversionFeatures const &lhs,
+                VkPhysicalDeviceSamplerYcbcrConversionFeatures const &rhs) noexcept;
+
+bool operator==(VkSamplerYcbcrConversionImageFormatProperties const &lhs,
+                VkSamplerYcbcrConversionImageFormatProperties const &rhs) noexcept;
+bool operator!=(VkSamplerYcbcrConversionImageFormatProperties const &lhs,
+                VkSamplerYcbcrConversionImageFormatProperties const &rhs) noexcept;
+
+bool operator==(VkTextureLODGatherFormatPropertiesAMD const &lhs,
+                VkTextureLODGatherFormatPropertiesAMD const &rhs) noexcept;
+bool operator!=(VkTextureLODGatherFormatPropertiesAMD const &lhs,
+                VkTextureLODGatherFormatPropertiesAMD const &rhs) noexcept;
+
+bool operator==(VkConditionalRenderingBeginInfoEXT const &lhs,
+                VkConditionalRenderingBeginInfoEXT const &rhs) noexcept;
+bool operator!=(VkConditionalRenderingBeginInfoEXT const &lhs,
+                VkConditionalRenderingBeginInfoEXT const &rhs) noexcept;
+
+bool operator==(VkProtectedSubmitInfo const &lhs,
+                VkProtectedSubmitInfo const &rhs) noexcept;
+bool operator!=(VkProtectedSubmitInfo const &lhs,
+                VkProtectedSubmitInfo const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceProtectedMemoryFeatures const &lhs,
+                VkPhysicalDeviceProtectedMemoryFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceProtectedMemoryFeatures const &lhs,
+                VkPhysicalDeviceProtectedMemoryFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceProtectedMemoryProperties const &lhs,
+                VkPhysicalDeviceProtectedMemoryProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceProtectedMemoryProperties const &lhs,
+                VkPhysicalDeviceProtectedMemoryProperties const &rhs) noexcept;
+
+bool operator==(VkDeviceQueueInfo2 const &lhs,
+                VkDeviceQueueInfo2 const &rhs) noexcept;
+bool operator!=(VkDeviceQueueInfo2 const &lhs,
+                VkDeviceQueueInfo2 const &rhs) noexcept;
+
+bool operator==(VkPipelineCoverageToColorStateCreateInfoNV const &lhs,
+                VkPipelineCoverageToColorStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineCoverageToColorStateCreateInfoNV const &lhs,
+                VkPipelineCoverageToColorStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSamplerFilterMinmaxProperties const &lhs,
+                VkPhysicalDeviceSamplerFilterMinmaxProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSamplerFilterMinmaxProperties const &lhs,
+                VkPhysicalDeviceSamplerFilterMinmaxProperties const &rhs) noexcept;
+
+bool operator==(VkSampleLocationEXT const &lhs,
+                VkSampleLocationEXT const &rhs) noexcept;
+bool operator!=(VkSampleLocationEXT const &lhs,
+                VkSampleLocationEXT const &rhs) noexcept;
+
+bool operator==(VkSampleLocationsInfoEXT const &lhs,
+                VkSampleLocationsInfoEXT const &rhs) noexcept;
+bool operator!=(VkSampleLocationsInfoEXT const &lhs,
+                VkSampleLocationsInfoEXT const &rhs) noexcept;
+
+bool operator==(VkAttachmentSampleLocationsEXT const &lhs,
+                VkAttachmentSampleLocationsEXT const &rhs) noexcept;
+bool operator!=(VkAttachmentSampleLocationsEXT const &lhs,
+                VkAttachmentSampleLocationsEXT const &rhs) noexcept;
+
+bool operator==(VkSubpassSampleLocationsEXT const &lhs,
+                VkSubpassSampleLocationsEXT const &rhs) noexcept;
+bool operator!=(VkSubpassSampleLocationsEXT const &lhs,
+                VkSubpassSampleLocationsEXT const &rhs) noexcept;
+
+bool operator==(VkRenderPassSampleLocationsBeginInfoEXT const &lhs,
+                VkRenderPassSampleLocationsBeginInfoEXT const &rhs) noexcept;
+bool operator!=(VkRenderPassSampleLocationsBeginInfoEXT const &lhs,
+                VkRenderPassSampleLocationsBeginInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineSampleLocationsStateCreateInfoEXT const &lhs,
+                VkPipelineSampleLocationsStateCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineSampleLocationsStateCreateInfoEXT const &lhs,
+                VkPipelineSampleLocationsStateCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSampleLocationsPropertiesEXT const &lhs,
+                VkPhysicalDeviceSampleLocationsPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSampleLocationsPropertiesEXT const &lhs,
+                VkPhysicalDeviceSampleLocationsPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkMultisamplePropertiesEXT const &lhs,
+                VkMultisamplePropertiesEXT const &rhs) noexcept;
+bool operator!=(VkMultisamplePropertiesEXT const &lhs,
+                VkMultisamplePropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkSamplerReductionModeCreateInfo const &lhs,
+                VkSamplerReductionModeCreateInfo const &rhs) noexcept;
+bool operator!=(VkSamplerReductionModeCreateInfo const &lhs,
+                VkSamplerReductionModeCreateInfo const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &lhs,
+                VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &lhs,
+                VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMultiDrawFeaturesEXT const &lhs,
+                VkPhysicalDeviceMultiDrawFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMultiDrawFeaturesEXT const &lhs,
+                VkPhysicalDeviceMultiDrawFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &lhs,
+                VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &lhs,
+                VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineColorBlendAdvancedStateCreateInfoEXT const &lhs,
+                VkPipelineColorBlendAdvancedStateCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineColorBlendAdvancedStateCreateInfoEXT const &lhs,
+                VkPipelineColorBlendAdvancedStateCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceInlineUniformBlockFeaturesEXT const &lhs,
+                VkPhysicalDeviceInlineUniformBlockFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceInlineUniformBlockFeaturesEXT const &lhs,
+                VkPhysicalDeviceInlineUniformBlockFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceInlineUniformBlockPropertiesEXT const &lhs,
+                VkPhysicalDeviceInlineUniformBlockPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceInlineUniformBlockPropertiesEXT const &lhs,
+                VkPhysicalDeviceInlineUniformBlockPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkWriteDescriptorSetInlineUniformBlockEXT const &lhs,
+                VkWriteDescriptorSetInlineUniformBlockEXT const &rhs) noexcept;
+bool operator!=(VkWriteDescriptorSetInlineUniformBlockEXT const &lhs,
+                VkWriteDescriptorSetInlineUniformBlockEXT const &rhs) noexcept;
+
+bool operator==(VkDescriptorPoolInlineUniformBlockCreateInfoEXT const &lhs,
+                VkDescriptorPoolInlineUniformBlockCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkDescriptorPoolInlineUniformBlockCreateInfoEXT const &lhs,
+                VkDescriptorPoolInlineUniformBlockCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineCoverageModulationStateCreateInfoNV const &lhs,
+                VkPipelineCoverageModulationStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineCoverageModulationStateCreateInfoNV const &lhs,
+                VkPipelineCoverageModulationStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkImageFormatListCreateInfo const &lhs,
+                VkImageFormatListCreateInfo const &rhs) noexcept;
+bool operator!=(VkImageFormatListCreateInfo const &lhs,
+                VkImageFormatListCreateInfo const &rhs) noexcept;
+
+bool operator==(VkValidationCacheCreateInfoEXT const &lhs,
+                VkValidationCacheCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkValidationCacheCreateInfoEXT const &lhs,
+                VkValidationCacheCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkShaderModuleValidationCacheCreateInfoEXT const &lhs,
+                VkShaderModuleValidationCacheCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkShaderModuleValidationCacheCreateInfoEXT const &lhs,
+                VkShaderModuleValidationCacheCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMaintenance3Properties const &lhs,
+                VkPhysicalDeviceMaintenance3Properties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMaintenance3Properties const &lhs,
+                VkPhysicalDeviceMaintenance3Properties const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMaintenance4FeaturesKHR const &lhs,
+                VkPhysicalDeviceMaintenance4FeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMaintenance4FeaturesKHR const &lhs,
+                VkPhysicalDeviceMaintenance4FeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMaintenance4PropertiesKHR const &lhs,
+                VkPhysicalDeviceMaintenance4PropertiesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMaintenance4PropertiesKHR const &lhs,
+                VkPhysicalDeviceMaintenance4PropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkDescriptorSetLayoutSupport const &lhs,
+                VkDescriptorSetLayoutSupport const &rhs) noexcept;
+bool operator!=(VkDescriptorSetLayoutSupport const &lhs,
+                VkDescriptorSetLayoutSupport const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderDrawParametersFeatures const &lhs,
+                VkPhysicalDeviceShaderDrawParametersFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderDrawParametersFeatures const &lhs,
+                VkPhysicalDeviceShaderDrawParametersFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderFloat16Int8Features const &lhs,
+                VkPhysicalDeviceShaderFloat16Int8Features const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderFloat16Int8Features const &lhs,
+                VkPhysicalDeviceShaderFloat16Int8Features const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFloatControlsProperties const &lhs,
+                VkPhysicalDeviceFloatControlsProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFloatControlsProperties const &lhs,
+                VkPhysicalDeviceFloatControlsProperties const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceHostQueryResetFeatures const &lhs,
+                VkPhysicalDeviceHostQueryResetFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceHostQueryResetFeatures const &lhs,
+                VkPhysicalDeviceHostQueryResetFeatures const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkNativeBufferUsage2ANDROID const &lhs,
+                VkNativeBufferUsage2ANDROID const &rhs) noexcept;
+bool operator!=(VkNativeBufferUsage2ANDROID const &lhs,
+                VkNativeBufferUsage2ANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkNativeBufferANDROID const &lhs,
+                VkNativeBufferANDROID const &rhs) noexcept;
+bool operator!=(VkNativeBufferANDROID const &lhs,
+                VkNativeBufferANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkSwapchainImageCreateInfoANDROID const &lhs,
+                VkSwapchainImageCreateInfoANDROID const &rhs) noexcept;
+bool operator!=(VkSwapchainImageCreateInfoANDROID const &lhs,
+                VkSwapchainImageCreateInfoANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkPhysicalDevicePresentationPropertiesANDROID const &lhs,
+                VkPhysicalDevicePresentationPropertiesANDROID const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePresentationPropertiesANDROID const &lhs,
+                VkPhysicalDevicePresentationPropertiesANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+bool operator==(VkShaderResourceUsageAMD const &lhs,
+                VkShaderResourceUsageAMD const &rhs) noexcept;
+bool operator!=(VkShaderResourceUsageAMD const &lhs,
+                VkShaderResourceUsageAMD const &rhs) noexcept;
+
+bool operator==(VkShaderStatisticsInfoAMD const &lhs,
+                VkShaderStatisticsInfoAMD const &rhs) noexcept;
+bool operator!=(VkShaderStatisticsInfoAMD const &lhs,
+                VkShaderStatisticsInfoAMD const &rhs) noexcept;
+
+bool operator==(VkDeviceQueueGlobalPriorityCreateInfoEXT const &lhs,
+                VkDeviceQueueGlobalPriorityCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkDeviceQueueGlobalPriorityCreateInfoEXT const &lhs,
+                VkDeviceQueueGlobalPriorityCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const &lhs,
+                VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const &lhs,
+                VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkQueueFamilyGlobalPriorityPropertiesEXT const &lhs,
+                VkQueueFamilyGlobalPriorityPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkQueueFamilyGlobalPriorityPropertiesEXT const &lhs,
+                VkQueueFamilyGlobalPriorityPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkDebugUtilsObjectNameInfoEXT const &lhs,
+                VkDebugUtilsObjectNameInfoEXT const &rhs) noexcept;
+bool operator!=(VkDebugUtilsObjectNameInfoEXT const &lhs,
+                VkDebugUtilsObjectNameInfoEXT const &rhs) noexcept;
+
+bool operator==(VkDebugUtilsObjectTagInfoEXT const &lhs,
+                VkDebugUtilsObjectTagInfoEXT const &rhs) noexcept;
+bool operator!=(VkDebugUtilsObjectTagInfoEXT const &lhs,
+                VkDebugUtilsObjectTagInfoEXT const &rhs) noexcept;
+
+bool operator==(VkDebugUtilsLabelEXT const &lhs,
+                VkDebugUtilsLabelEXT const &rhs) noexcept;
+bool operator!=(VkDebugUtilsLabelEXT const &lhs,
+                VkDebugUtilsLabelEXT const &rhs) noexcept;
+
+bool operator==(VkDebugUtilsMessengerCreateInfoEXT const &lhs,
+                VkDebugUtilsMessengerCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkDebugUtilsMessengerCreateInfoEXT const &lhs,
+                VkDebugUtilsMessengerCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkDebugUtilsMessengerCallbackDataEXT const &lhs,
+                VkDebugUtilsMessengerCallbackDataEXT const &rhs) noexcept;
+bool operator!=(VkDebugUtilsMessengerCallbackDataEXT const &lhs,
+                VkDebugUtilsMessengerCallbackDataEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &lhs,
+                VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &lhs,
+                VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkDeviceDeviceMemoryReportCreateInfoEXT const &lhs,
+                VkDeviceDeviceMemoryReportCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkDeviceDeviceMemoryReportCreateInfoEXT const &lhs,
+                VkDeviceDeviceMemoryReportCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkDeviceMemoryReportCallbackDataEXT const &lhs,
+                VkDeviceMemoryReportCallbackDataEXT const &rhs) noexcept;
+bool operator!=(VkDeviceMemoryReportCallbackDataEXT const &lhs,
+                VkDeviceMemoryReportCallbackDataEXT const &rhs) noexcept;
+
+bool operator==(VkImportMemoryHostPointerInfoEXT const &lhs,
+                VkImportMemoryHostPointerInfoEXT const &rhs) noexcept;
+bool operator!=(VkImportMemoryHostPointerInfoEXT const &lhs,
+                VkImportMemoryHostPointerInfoEXT const &rhs) noexcept;
+
+bool operator==(VkMemoryHostPointerPropertiesEXT const &lhs,
+                VkMemoryHostPointerPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkMemoryHostPointerPropertiesEXT const &lhs,
+                VkMemoryHostPointerPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &lhs,
+                VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &lhs,
+                VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &lhs,
+                VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &lhs,
+                VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkCalibratedTimestampInfoEXT const &lhs,
+                VkCalibratedTimestampInfoEXT const &rhs) noexcept;
+bool operator!=(VkCalibratedTimestampInfoEXT const &lhs,
+                VkCalibratedTimestampInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderCorePropertiesAMD const &lhs,
+                VkPhysicalDeviceShaderCorePropertiesAMD const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderCorePropertiesAMD const &lhs,
+                VkPhysicalDeviceShaderCorePropertiesAMD const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderCoreProperties2AMD const &lhs,
+                VkPhysicalDeviceShaderCoreProperties2AMD const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderCoreProperties2AMD const &lhs,
+                VkPhysicalDeviceShaderCoreProperties2AMD const &rhs) noexcept;
+
+bool operator==(VkPipelineRasterizationConservativeStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationConservativeStateCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineRasterizationConservativeStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationConservativeStateCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDescriptorIndexingFeatures const &lhs,
+                VkPhysicalDeviceDescriptorIndexingFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDescriptorIndexingFeatures const &lhs,
+                VkPhysicalDeviceDescriptorIndexingFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDescriptorIndexingProperties const &lhs,
+                VkPhysicalDeviceDescriptorIndexingProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDescriptorIndexingProperties const &lhs,
+                VkPhysicalDeviceDescriptorIndexingProperties const &rhs) noexcept;
+
+bool operator==(VkDescriptorSetLayoutBindingFlagsCreateInfo const &lhs,
+                VkDescriptorSetLayoutBindingFlagsCreateInfo const &rhs) noexcept;
+bool operator!=(VkDescriptorSetLayoutBindingFlagsCreateInfo const &lhs,
+                VkDescriptorSetLayoutBindingFlagsCreateInfo const &rhs) noexcept;
+
+bool operator==(VkDescriptorSetVariableDescriptorCountAllocateInfo const &lhs,
+                VkDescriptorSetVariableDescriptorCountAllocateInfo const &rhs) noexcept;
+bool operator!=(VkDescriptorSetVariableDescriptorCountAllocateInfo const &lhs,
+                VkDescriptorSetVariableDescriptorCountAllocateInfo const &rhs) noexcept;
+
+bool operator==(VkDescriptorSetVariableDescriptorCountLayoutSupport const &lhs,
+                VkDescriptorSetVariableDescriptorCountLayoutSupport const &rhs) noexcept;
+bool operator!=(VkDescriptorSetVariableDescriptorCountLayoutSupport const &lhs,
+                VkDescriptorSetVariableDescriptorCountLayoutSupport const &rhs) noexcept;
+
+bool operator==(VkAttachmentDescription2 const &lhs,
+                VkAttachmentDescription2 const &rhs) noexcept;
+bool operator!=(VkAttachmentDescription2 const &lhs,
+                VkAttachmentDescription2 const &rhs) noexcept;
+
+bool operator==(VkAttachmentReference2 const &lhs,
+                VkAttachmentReference2 const &rhs) noexcept;
+bool operator!=(VkAttachmentReference2 const &lhs,
+                VkAttachmentReference2 const &rhs) noexcept;
+
+bool operator==(VkSubpassDescription2 const &lhs,
+                VkSubpassDescription2 const &rhs) noexcept;
+bool operator!=(VkSubpassDescription2 const &lhs,
+                VkSubpassDescription2 const &rhs) noexcept;
+
+bool operator==(VkSubpassDependency2 const &lhs,
+                VkSubpassDependency2 const &rhs) noexcept;
+bool operator!=(VkSubpassDependency2 const &lhs,
+                VkSubpassDependency2 const &rhs) noexcept;
+
+bool operator==(VkRenderPassCreateInfo2 const &lhs,
+                VkRenderPassCreateInfo2 const &rhs) noexcept;
+bool operator!=(VkRenderPassCreateInfo2 const &lhs,
+                VkRenderPassCreateInfo2 const &rhs) noexcept;
+
+bool operator==(VkSubpassBeginInfo const &lhs,
+                VkSubpassBeginInfo const &rhs) noexcept;
+bool operator!=(VkSubpassBeginInfo const &lhs,
+                VkSubpassBeginInfo const &rhs) noexcept;
+
+bool operator==(VkSubpassEndInfo const &lhs,
+                VkSubpassEndInfo const &rhs) noexcept;
+bool operator!=(VkSubpassEndInfo const &lhs,
+                VkSubpassEndInfo const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceTimelineSemaphoreFeatures const &lhs,
+                VkPhysicalDeviceTimelineSemaphoreFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceTimelineSemaphoreFeatures const &lhs,
+                VkPhysicalDeviceTimelineSemaphoreFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceTimelineSemaphoreProperties const &lhs,
+                VkPhysicalDeviceTimelineSemaphoreProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceTimelineSemaphoreProperties const &lhs,
+                VkPhysicalDeviceTimelineSemaphoreProperties const &rhs) noexcept;
+
+bool operator==(VkSemaphoreTypeCreateInfo const &lhs,
+                VkSemaphoreTypeCreateInfo const &rhs) noexcept;
+bool operator!=(VkSemaphoreTypeCreateInfo const &lhs,
+                VkSemaphoreTypeCreateInfo const &rhs) noexcept;
+
+bool operator==(VkTimelineSemaphoreSubmitInfo const &lhs,
+                VkTimelineSemaphoreSubmitInfo const &rhs) noexcept;
+bool operator!=(VkTimelineSemaphoreSubmitInfo const &lhs,
+                VkTimelineSemaphoreSubmitInfo const &rhs) noexcept;
+
+bool operator==(VkSemaphoreWaitInfo const &lhs,
+                VkSemaphoreWaitInfo const &rhs) noexcept;
+bool operator!=(VkSemaphoreWaitInfo const &lhs,
+                VkSemaphoreWaitInfo const &rhs) noexcept;
+
+bool operator==(VkSemaphoreSignalInfo const &lhs,
+                VkSemaphoreSignalInfo const &rhs) noexcept;
+bool operator!=(VkSemaphoreSignalInfo const &lhs,
+                VkSemaphoreSignalInfo const &rhs) noexcept;
+
+bool operator==(VkVertexInputBindingDivisorDescriptionEXT const &lhs,
+                VkVertexInputBindingDivisorDescriptionEXT const &rhs) noexcept;
+bool operator!=(VkVertexInputBindingDivisorDescriptionEXT const &lhs,
+                VkVertexInputBindingDivisorDescriptionEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineVertexInputDivisorStateCreateInfoEXT const &lhs,
+                VkPipelineVertexInputDivisorStateCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineVertexInputDivisorStateCreateInfoEXT const &lhs,
+                VkPipelineVertexInputDivisorStateCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &lhs,
+                VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &lhs,
+                VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePCIBusInfoPropertiesEXT const &lhs,
+                VkPhysicalDevicePCIBusInfoPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePCIBusInfoPropertiesEXT const &lhs,
+                VkPhysicalDevicePCIBusInfoPropertiesEXT const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkImportAndroidHardwareBufferInfoANDROID const &lhs,
+                VkImportAndroidHardwareBufferInfoANDROID const &rhs) noexcept;
+bool operator!=(VkImportAndroidHardwareBufferInfoANDROID const &lhs,
+                VkImportAndroidHardwareBufferInfoANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidHardwareBufferUsageANDROID const &lhs,
+                VkAndroidHardwareBufferUsageANDROID const &rhs) noexcept;
+bool operator!=(VkAndroidHardwareBufferUsageANDROID const &lhs,
+                VkAndroidHardwareBufferUsageANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidHardwareBufferPropertiesANDROID const &lhs,
+                VkAndroidHardwareBufferPropertiesANDROID const &rhs) noexcept;
+bool operator!=(VkAndroidHardwareBufferPropertiesANDROID const &lhs,
+                VkAndroidHardwareBufferPropertiesANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkMemoryGetAndroidHardwareBufferInfoANDROID const &lhs,
+                VkMemoryGetAndroidHardwareBufferInfoANDROID const &rhs) noexcept;
+bool operator!=(VkMemoryGetAndroidHardwareBufferInfoANDROID const &lhs,
+                VkMemoryGetAndroidHardwareBufferInfoANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidHardwareBufferFormatPropertiesANDROID const &lhs,
+                VkAndroidHardwareBufferFormatPropertiesANDROID const &rhs) noexcept;
+bool operator!=(VkAndroidHardwareBufferFormatPropertiesANDROID const &lhs,
+                VkAndroidHardwareBufferFormatPropertiesANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+bool operator==(VkCommandBufferInheritanceConditionalRenderingInfoEXT const &lhs,
+                VkCommandBufferInheritanceConditionalRenderingInfoEXT const &rhs) noexcept;
+bool operator!=(VkCommandBufferInheritanceConditionalRenderingInfoEXT const &lhs,
+                VkCommandBufferInheritanceConditionalRenderingInfoEXT const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkExternalFormatANDROID const &lhs,
+                VkExternalFormatANDROID const &rhs) noexcept;
+bool operator!=(VkExternalFormatANDROID const &lhs,
+                VkExternalFormatANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+bool operator==(VkPhysicalDevice8BitStorageFeatures const &lhs,
+                VkPhysicalDevice8BitStorageFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDevice8BitStorageFeatures const &lhs,
+                VkPhysicalDevice8BitStorageFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceConditionalRenderingFeaturesEXT const &lhs,
+                VkPhysicalDeviceConditionalRenderingFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceConditionalRenderingFeaturesEXT const &lhs,
+                VkPhysicalDeviceConditionalRenderingFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceVulkanMemoryModelFeatures const &lhs,
+                VkPhysicalDeviceVulkanMemoryModelFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVulkanMemoryModelFeatures const &lhs,
+                VkPhysicalDeviceVulkanMemoryModelFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderAtomicInt64Features const &lhs,
+                VkPhysicalDeviceShaderAtomicInt64Features const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderAtomicInt64Features const &lhs,
+                VkPhysicalDeviceShaderAtomicInt64Features const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &lhs,
+                VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &lhs,
+                VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkQueueFamilyCheckpointPropertiesNV const &lhs,
+                VkQueueFamilyCheckpointPropertiesNV const &rhs) noexcept;
+bool operator!=(VkQueueFamilyCheckpointPropertiesNV const &lhs,
+                VkQueueFamilyCheckpointPropertiesNV const &rhs) noexcept;
+
+bool operator==(VkCheckpointDataNV const &lhs,
+                VkCheckpointDataNV const &rhs) noexcept;
+bool operator!=(VkCheckpointDataNV const &lhs,
+                VkCheckpointDataNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDepthStencilResolveProperties const &lhs,
+                VkPhysicalDeviceDepthStencilResolveProperties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDepthStencilResolveProperties const &lhs,
+                VkPhysicalDeviceDepthStencilResolveProperties const &rhs) noexcept;
+
+bool operator==(VkSubpassDescriptionDepthStencilResolve const &lhs,
+                VkSubpassDescriptionDepthStencilResolve const &rhs) noexcept;
+bool operator!=(VkSubpassDescriptionDepthStencilResolve const &lhs,
+                VkSubpassDescriptionDepthStencilResolve const &rhs) noexcept;
+
+bool operator==(VkImageViewASTCDecodeModeEXT const &lhs,
+                VkImageViewASTCDecodeModeEXT const &rhs) noexcept;
+bool operator!=(VkImageViewASTCDecodeModeEXT const &lhs,
+                VkImageViewASTCDecodeModeEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceASTCDecodeFeaturesEXT const &lhs,
+                VkPhysicalDeviceASTCDecodeFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceASTCDecodeFeaturesEXT const &lhs,
+                VkPhysicalDeviceASTCDecodeFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceTransformFeedbackFeaturesEXT const &lhs,
+                VkPhysicalDeviceTransformFeedbackFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceTransformFeedbackFeaturesEXT const &lhs,
+                VkPhysicalDeviceTransformFeedbackFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceTransformFeedbackPropertiesEXT const &lhs,
+                VkPhysicalDeviceTransformFeedbackPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceTransformFeedbackPropertiesEXT const &lhs,
+                VkPhysicalDeviceTransformFeedbackPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineRasterizationStateStreamCreateInfoEXT const &lhs,
+                VkPipelineRasterizationStateStreamCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineRasterizationStateStreamCreateInfoEXT const &lhs,
+                VkPipelineRasterizationStateStreamCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &lhs,
+                VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &lhs,
+                VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &lhs,
+                VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &lhs,
+                VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceExclusiveScissorFeaturesNV const &lhs,
+                VkPhysicalDeviceExclusiveScissorFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceExclusiveScissorFeaturesNV const &lhs,
+                VkPhysicalDeviceExclusiveScissorFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPipelineViewportExclusiveScissorStateCreateInfoNV const &lhs,
+                VkPipelineViewportExclusiveScissorStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineViewportExclusiveScissorStateCreateInfoNV const &lhs,
+                VkPipelineViewportExclusiveScissorStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceCornerSampledImageFeaturesNV const &lhs,
+                VkPhysicalDeviceCornerSampledImageFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceCornerSampledImageFeaturesNV const &lhs,
+                VkPhysicalDeviceCornerSampledImageFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &lhs,
+                VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &lhs,
+                VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &lhs,
+                VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &lhs,
+                VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderImageFootprintFeaturesNV const &lhs,
+                VkPhysicalDeviceShaderImageFootprintFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderImageFootprintFeaturesNV const &lhs,
+                VkPhysicalDeviceShaderImageFootprintFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &lhs,
+                VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &lhs,
+                VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkShadingRatePaletteNV const &lhs,
+                VkShadingRatePaletteNV const &rhs) noexcept;
+bool operator!=(VkShadingRatePaletteNV const &lhs,
+                VkShadingRatePaletteNV const &rhs) noexcept;
+
+bool operator==(VkPipelineViewportShadingRateImageStateCreateInfoNV const &lhs,
+                VkPipelineViewportShadingRateImageStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineViewportShadingRateImageStateCreateInfoNV const &lhs,
+                VkPipelineViewportShadingRateImageStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShadingRateImageFeaturesNV const &lhs,
+                VkPhysicalDeviceShadingRateImageFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShadingRateImageFeaturesNV const &lhs,
+                VkPhysicalDeviceShadingRateImageFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShadingRateImagePropertiesNV const &lhs,
+                VkPhysicalDeviceShadingRateImagePropertiesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShadingRateImagePropertiesNV const &lhs,
+                VkPhysicalDeviceShadingRateImagePropertiesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &lhs,
+                VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &lhs,
+                VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &rhs) noexcept;
+
+bool operator==(VkCoarseSampleLocationNV const &lhs,
+                VkCoarseSampleLocationNV const &rhs) noexcept;
+bool operator!=(VkCoarseSampleLocationNV const &lhs,
+                VkCoarseSampleLocationNV const &rhs) noexcept;
+
+bool operator==(VkCoarseSampleOrderCustomNV const &lhs,
+                VkCoarseSampleOrderCustomNV const &rhs) noexcept;
+bool operator!=(VkCoarseSampleOrderCustomNV const &lhs,
+                VkCoarseSampleOrderCustomNV const &rhs) noexcept;
+
+bool operator==(VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &lhs,
+                VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &lhs,
+                VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMeshShaderFeaturesNV const &lhs,
+                VkPhysicalDeviceMeshShaderFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMeshShaderFeaturesNV const &lhs,
+                VkPhysicalDeviceMeshShaderFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMeshShaderPropertiesNV const &lhs,
+                VkPhysicalDeviceMeshShaderPropertiesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMeshShaderPropertiesNV const &lhs,
+                VkPhysicalDeviceMeshShaderPropertiesNV const &rhs) noexcept;
+
+bool operator==(VkDrawMeshTasksIndirectCommandNV const &lhs,
+                VkDrawMeshTasksIndirectCommandNV const &rhs) noexcept;
+bool operator!=(VkDrawMeshTasksIndirectCommandNV const &lhs,
+                VkDrawMeshTasksIndirectCommandNV const &rhs) noexcept;
+
+bool operator==(VkRayTracingShaderGroupCreateInfoNV const &lhs,
+                VkRayTracingShaderGroupCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkRayTracingShaderGroupCreateInfoNV const &lhs,
+                VkRayTracingShaderGroupCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkRayTracingShaderGroupCreateInfoKHR const &lhs,
+                VkRayTracingShaderGroupCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkRayTracingShaderGroupCreateInfoKHR const &lhs,
+                VkRayTracingShaderGroupCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkRayTracingPipelineCreateInfoNV const &lhs,
+                VkRayTracingPipelineCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkRayTracingPipelineCreateInfoNV const &lhs,
+                VkRayTracingPipelineCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkRayTracingPipelineCreateInfoKHR const &lhs,
+                VkRayTracingPipelineCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkRayTracingPipelineCreateInfoKHR const &lhs,
+                VkRayTracingPipelineCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkGeometryTrianglesNV const &lhs,
+                VkGeometryTrianglesNV const &rhs) noexcept;
+bool operator!=(VkGeometryTrianglesNV const &lhs,
+                VkGeometryTrianglesNV const &rhs) noexcept;
+
+bool operator==(VkGeometryAABBNV const &lhs,
+                VkGeometryAABBNV const &rhs) noexcept;
+bool operator!=(VkGeometryAABBNV const &lhs,
+                VkGeometryAABBNV const &rhs) noexcept;
+
+bool operator==(VkGeometryDataNV const &lhs,
+                VkGeometryDataNV const &rhs) noexcept;
+bool operator!=(VkGeometryDataNV const &lhs,
+                VkGeometryDataNV const &rhs) noexcept;
+
+bool operator==(VkGeometryNV const &lhs,
+                VkGeometryNV const &rhs) noexcept;
+bool operator!=(VkGeometryNV const &lhs,
+                VkGeometryNV const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureInfoNV const &lhs,
+                VkAccelerationStructureInfoNV const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureInfoNV const &lhs,
+                VkAccelerationStructureInfoNV const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureCreateInfoNV const &lhs,
+                VkAccelerationStructureCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureCreateInfoNV const &lhs,
+                VkAccelerationStructureCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkBindAccelerationStructureMemoryInfoNV const &lhs,
+                VkBindAccelerationStructureMemoryInfoNV const &rhs) noexcept;
+bool operator!=(VkBindAccelerationStructureMemoryInfoNV const &lhs,
+                VkBindAccelerationStructureMemoryInfoNV const &rhs) noexcept;
+
+bool operator==(VkWriteDescriptorSetAccelerationStructureKHR const &lhs,
+                VkWriteDescriptorSetAccelerationStructureKHR const &rhs) noexcept;
+bool operator!=(VkWriteDescriptorSetAccelerationStructureKHR const &lhs,
+                VkWriteDescriptorSetAccelerationStructureKHR const &rhs) noexcept;
+
+bool operator==(VkWriteDescriptorSetAccelerationStructureNV const &lhs,
+                VkWriteDescriptorSetAccelerationStructureNV const &rhs) noexcept;
+bool operator!=(VkWriteDescriptorSetAccelerationStructureNV const &lhs,
+                VkWriteDescriptorSetAccelerationStructureNV const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureMemoryRequirementsInfoNV const &lhs,
+                VkAccelerationStructureMemoryRequirementsInfoNV const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureMemoryRequirementsInfoNV const &lhs,
+                VkAccelerationStructureMemoryRequirementsInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceAccelerationStructureFeaturesKHR const &lhs,
+                VkPhysicalDeviceAccelerationStructureFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceAccelerationStructureFeaturesKHR const &lhs,
+                VkPhysicalDeviceAccelerationStructureFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &lhs,
+                VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &lhs,
+                VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceRayQueryFeaturesKHR const &lhs,
+                VkPhysicalDeviceRayQueryFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceRayQueryFeaturesKHR const &lhs,
+                VkPhysicalDeviceRayQueryFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceAccelerationStructurePropertiesKHR const &lhs,
+                VkPhysicalDeviceAccelerationStructurePropertiesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceAccelerationStructurePropertiesKHR const &lhs,
+                VkPhysicalDeviceAccelerationStructurePropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &lhs,
+                VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &lhs,
+                VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceRayTracingPropertiesNV const &lhs,
+                VkPhysicalDeviceRayTracingPropertiesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceRayTracingPropertiesNV const &lhs,
+                VkPhysicalDeviceRayTracingPropertiesNV const &rhs) noexcept;
+
+bool operator==(VkStridedDeviceAddressRegionKHR const &lhs,
+                VkStridedDeviceAddressRegionKHR const &rhs) noexcept;
+bool operator!=(VkStridedDeviceAddressRegionKHR const &lhs,
+                VkStridedDeviceAddressRegionKHR const &rhs) noexcept;
+
+bool operator==(VkTraceRaysIndirectCommandKHR const &lhs,
+                VkTraceRaysIndirectCommandKHR const &rhs) noexcept;
+bool operator!=(VkTraceRaysIndirectCommandKHR const &lhs,
+                VkTraceRaysIndirectCommandKHR const &rhs) noexcept;
+
+bool operator==(VkDrmFormatModifierPropertiesListEXT const &lhs,
+                VkDrmFormatModifierPropertiesListEXT const &rhs) noexcept;
+bool operator!=(VkDrmFormatModifierPropertiesListEXT const &lhs,
+                VkDrmFormatModifierPropertiesListEXT const &rhs) noexcept;
+
+bool operator==(VkDrmFormatModifierPropertiesEXT const &lhs,
+                VkDrmFormatModifierPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkDrmFormatModifierPropertiesEXT const &lhs,
+                VkDrmFormatModifierPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &lhs,
+                VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &lhs,
+                VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &rhs) noexcept;
+
+bool operator==(VkImageDrmFormatModifierListCreateInfoEXT const &lhs,
+                VkImageDrmFormatModifierListCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkImageDrmFormatModifierListCreateInfoEXT const &lhs,
+                VkImageDrmFormatModifierListCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkImageDrmFormatModifierExplicitCreateInfoEXT const &lhs,
+                VkImageDrmFormatModifierExplicitCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkImageDrmFormatModifierExplicitCreateInfoEXT const &lhs,
+                VkImageDrmFormatModifierExplicitCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkImageDrmFormatModifierPropertiesEXT const &lhs,
+                VkImageDrmFormatModifierPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkImageDrmFormatModifierPropertiesEXT const &lhs,
+                VkImageDrmFormatModifierPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkImageStencilUsageCreateInfo const &lhs,
+                VkImageStencilUsageCreateInfo const &rhs) noexcept;
+bool operator!=(VkImageStencilUsageCreateInfo const &lhs,
+                VkImageStencilUsageCreateInfo const &rhs) noexcept;
+
+bool operator==(VkDeviceMemoryOverallocationCreateInfoAMD const &lhs,
+                VkDeviceMemoryOverallocationCreateInfoAMD const &rhs) noexcept;
+bool operator!=(VkDeviceMemoryOverallocationCreateInfoAMD const &lhs,
+                VkDeviceMemoryOverallocationCreateInfoAMD const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkRenderPassFragmentDensityMapCreateInfoEXT const &lhs,
+                VkRenderPassFragmentDensityMapCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkRenderPassFragmentDensityMapCreateInfoEXT const &lhs,
+                VkRenderPassFragmentDensityMapCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceScalarBlockLayoutFeatures const &lhs,
+                VkPhysicalDeviceScalarBlockLayoutFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceScalarBlockLayoutFeatures const &lhs,
+                VkPhysicalDeviceScalarBlockLayoutFeatures const &rhs) noexcept;
+
+bool operator==(VkSurfaceProtectedCapabilitiesKHR const &lhs,
+                VkSurfaceProtectedCapabilitiesKHR const &rhs) noexcept;
+bool operator!=(VkSurfaceProtectedCapabilitiesKHR const &lhs,
+                VkSurfaceProtectedCapabilitiesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &lhs,
+                VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &lhs,
+                VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDepthClipEnableFeaturesEXT const &lhs,
+                VkPhysicalDeviceDepthClipEnableFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDepthClipEnableFeaturesEXT const &lhs,
+                VkPhysicalDeviceDepthClipEnableFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineRasterizationDepthClipStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationDepthClipStateCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineRasterizationDepthClipStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationDepthClipStateCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMemoryBudgetPropertiesEXT const &lhs,
+                VkPhysicalDeviceMemoryBudgetPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMemoryBudgetPropertiesEXT const &lhs,
+                VkPhysicalDeviceMemoryBudgetPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMemoryPriorityFeaturesEXT const &lhs,
+                VkPhysicalDeviceMemoryPriorityFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMemoryPriorityFeaturesEXT const &lhs,
+                VkPhysicalDeviceMemoryPriorityFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkMemoryPriorityAllocateInfoEXT const &lhs,
+                VkMemoryPriorityAllocateInfoEXT const &rhs) noexcept;
+bool operator!=(VkMemoryPriorityAllocateInfoEXT const &lhs,
+                VkMemoryPriorityAllocateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &lhs,
+                VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &lhs,
+                VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceBufferDeviceAddressFeatures const &lhs,
+                VkPhysicalDeviceBufferDeviceAddressFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceBufferDeviceAddressFeatures const &lhs,
+                VkPhysicalDeviceBufferDeviceAddressFeatures const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &lhs,
+                VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &lhs,
+                VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkBufferDeviceAddressInfo const &lhs,
+                VkBufferDeviceAddressInfo const &rhs) noexcept;
+bool operator!=(VkBufferDeviceAddressInfo const &lhs,
+                VkBufferDeviceAddressInfo const &rhs) noexcept;
+
+bool operator==(VkBufferOpaqueCaptureAddressCreateInfo const &lhs,
+                VkBufferOpaqueCaptureAddressCreateInfo const &rhs) noexcept;
+bool operator!=(VkBufferOpaqueCaptureAddressCreateInfo const &lhs,
+                VkBufferOpaqueCaptureAddressCreateInfo const &rhs) noexcept;
+
+bool operator==(VkBufferDeviceAddressCreateInfoEXT const &lhs,
+                VkBufferDeviceAddressCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkBufferDeviceAddressCreateInfoEXT const &lhs,
+                VkBufferDeviceAddressCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceImageViewImageFormatInfoEXT const &lhs,
+                VkPhysicalDeviceImageViewImageFormatInfoEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceImageViewImageFormatInfoEXT const &lhs,
+                VkPhysicalDeviceImageViewImageFormatInfoEXT const &rhs) noexcept;
+
+bool operator==(VkFilterCubicImageViewImageFormatPropertiesEXT const &lhs,
+                VkFilterCubicImageViewImageFormatPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkFilterCubicImageViewImageFormatPropertiesEXT const &lhs,
+                VkFilterCubicImageViewImageFormatPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceImagelessFramebufferFeatures const &lhs,
+                VkPhysicalDeviceImagelessFramebufferFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceImagelessFramebufferFeatures const &lhs,
+                VkPhysicalDeviceImagelessFramebufferFeatures const &rhs) noexcept;
+
+bool operator==(VkFramebufferAttachmentsCreateInfo const &lhs,
+                VkFramebufferAttachmentsCreateInfo const &rhs) noexcept;
+bool operator!=(VkFramebufferAttachmentsCreateInfo const &lhs,
+                VkFramebufferAttachmentsCreateInfo const &rhs) noexcept;
+
+bool operator==(VkFramebufferAttachmentImageInfo const &lhs,
+                VkFramebufferAttachmentImageInfo const &rhs) noexcept;
+bool operator!=(VkFramebufferAttachmentImageInfo const &lhs,
+                VkFramebufferAttachmentImageInfo const &rhs) noexcept;
+
+bool operator==(VkRenderPassAttachmentBeginInfo const &lhs,
+                VkRenderPassAttachmentBeginInfo const &rhs) noexcept;
+bool operator!=(VkRenderPassAttachmentBeginInfo const &lhs,
+                VkRenderPassAttachmentBeginInfo const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const &lhs,
+                VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const &lhs,
+                VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceCooperativeMatrixFeaturesNV const &lhs,
+                VkPhysicalDeviceCooperativeMatrixFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceCooperativeMatrixFeaturesNV const &lhs,
+                VkPhysicalDeviceCooperativeMatrixFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceCooperativeMatrixPropertiesNV const &lhs,
+                VkPhysicalDeviceCooperativeMatrixPropertiesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceCooperativeMatrixPropertiesNV const &lhs,
+                VkPhysicalDeviceCooperativeMatrixPropertiesNV const &rhs) noexcept;
+
+bool operator==(VkCooperativeMatrixPropertiesNV const &lhs,
+                VkCooperativeMatrixPropertiesNV const &rhs) noexcept;
+bool operator!=(VkCooperativeMatrixPropertiesNV const &lhs,
+                VkCooperativeMatrixPropertiesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &lhs,
+                VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &lhs,
+                VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkImageViewHandleInfoNVX const &lhs,
+                VkImageViewHandleInfoNVX const &rhs) noexcept;
+bool operator!=(VkImageViewHandleInfoNVX const &lhs,
+                VkImageViewHandleInfoNVX const &rhs) noexcept;
+
+bool operator==(VkImageViewAddressPropertiesNVX const &lhs,
+                VkImageViewAddressPropertiesNVX const &rhs) noexcept;
+bool operator!=(VkImageViewAddressPropertiesNVX const &lhs,
+                VkImageViewAddressPropertiesNVX const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_GGP
+bool operator==(VkPresentFrameTokenGGP const &lhs,
+                VkPresentFrameTokenGGP const &rhs) noexcept;
+bool operator!=(VkPresentFrameTokenGGP const &lhs,
+                VkPresentFrameTokenGGP const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_GGP
+
+bool operator==(VkPipelineCreationFeedbackEXT const &lhs,
+                VkPipelineCreationFeedbackEXT const &rhs) noexcept;
+bool operator!=(VkPipelineCreationFeedbackEXT const &lhs,
+                VkPipelineCreationFeedbackEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineCreationFeedbackCreateInfoEXT const &lhs,
+                VkPipelineCreationFeedbackCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineCreationFeedbackCreateInfoEXT const &lhs,
+                VkPipelineCreationFeedbackCreateInfoEXT const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkSurfaceFullScreenExclusiveInfoEXT const &lhs,
+                VkSurfaceFullScreenExclusiveInfoEXT const &rhs) noexcept;
+bool operator!=(VkSurfaceFullScreenExclusiveInfoEXT const &lhs,
+                VkSurfaceFullScreenExclusiveInfoEXT const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkSurfaceFullScreenExclusiveWin32InfoEXT const &lhs,
+                VkSurfaceFullScreenExclusiveWin32InfoEXT const &rhs) noexcept;
+bool operator!=(VkSurfaceFullScreenExclusiveWin32InfoEXT const &lhs,
+                VkSurfaceFullScreenExclusiveWin32InfoEXT const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkSurfaceCapabilitiesFullScreenExclusiveEXT const &lhs,
+                VkSurfaceCapabilitiesFullScreenExclusiveEXT const &rhs) noexcept;
+bool operator!=(VkSurfaceCapabilitiesFullScreenExclusiveEXT const &lhs,
+                VkSurfaceCapabilitiesFullScreenExclusiveEXT const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkPhysicalDevicePerformanceQueryFeaturesKHR const &lhs,
+                VkPhysicalDevicePerformanceQueryFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePerformanceQueryFeaturesKHR const &lhs,
+                VkPhysicalDevicePerformanceQueryFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePerformanceQueryPropertiesKHR const &lhs,
+                VkPhysicalDevicePerformanceQueryPropertiesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePerformanceQueryPropertiesKHR const &lhs,
+                VkPhysicalDevicePerformanceQueryPropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkPerformanceCounterKHR const &lhs,
+                VkPerformanceCounterKHR const &rhs) noexcept;
+bool operator!=(VkPerformanceCounterKHR const &lhs,
+                VkPerformanceCounterKHR const &rhs) noexcept;
+
+bool operator==(VkPerformanceCounterDescriptionKHR const &lhs,
+                VkPerformanceCounterDescriptionKHR const &rhs) noexcept;
+bool operator!=(VkPerformanceCounterDescriptionKHR const &lhs,
+                VkPerformanceCounterDescriptionKHR const &rhs) noexcept;
+
+bool operator==(VkQueryPoolPerformanceCreateInfoKHR const &lhs,
+                VkQueryPoolPerformanceCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkQueryPoolPerformanceCreateInfoKHR const &lhs,
+                VkQueryPoolPerformanceCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkAcquireProfilingLockInfoKHR const &lhs,
+                VkAcquireProfilingLockInfoKHR const &rhs) noexcept;
+bool operator!=(VkAcquireProfilingLockInfoKHR const &lhs,
+                VkAcquireProfilingLockInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPerformanceQuerySubmitInfoKHR const &lhs,
+                VkPerformanceQuerySubmitInfoKHR const &rhs) noexcept;
+bool operator!=(VkPerformanceQuerySubmitInfoKHR const &lhs,
+                VkPerformanceQuerySubmitInfoKHR const &rhs) noexcept;
+
+bool operator==(VkHeadlessSurfaceCreateInfoEXT const &lhs,
+                VkHeadlessSurfaceCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkHeadlessSurfaceCreateInfoEXT const &lhs,
+                VkHeadlessSurfaceCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceCoverageReductionModeFeaturesNV const &lhs,
+                VkPhysicalDeviceCoverageReductionModeFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceCoverageReductionModeFeaturesNV const &lhs,
+                VkPhysicalDeviceCoverageReductionModeFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPipelineCoverageReductionStateCreateInfoNV const &lhs,
+                VkPipelineCoverageReductionStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineCoverageReductionStateCreateInfoNV const &lhs,
+                VkPipelineCoverageReductionStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkFramebufferMixedSamplesCombinationNV const &lhs,
+                VkFramebufferMixedSamplesCombinationNV const &rhs) noexcept;
+bool operator!=(VkFramebufferMixedSamplesCombinationNV const &lhs,
+                VkFramebufferMixedSamplesCombinationNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &lhs,
+                VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &lhs,
+                VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &rhs) noexcept;
+
+bool operator==(VkInitializePerformanceApiInfoINTEL const &lhs,
+                VkInitializePerformanceApiInfoINTEL const &rhs) noexcept;
+bool operator!=(VkInitializePerformanceApiInfoINTEL const &lhs,
+                VkInitializePerformanceApiInfoINTEL const &rhs) noexcept;
+
+bool operator==(VkQueryPoolPerformanceQueryCreateInfoINTEL const &lhs,
+                VkQueryPoolPerformanceQueryCreateInfoINTEL const &rhs) noexcept;
+bool operator!=(VkQueryPoolPerformanceQueryCreateInfoINTEL const &lhs,
+                VkQueryPoolPerformanceQueryCreateInfoINTEL const &rhs) noexcept;
+
+bool operator==(VkPerformanceMarkerInfoINTEL const &lhs,
+                VkPerformanceMarkerInfoINTEL const &rhs) noexcept;
+bool operator!=(VkPerformanceMarkerInfoINTEL const &lhs,
+                VkPerformanceMarkerInfoINTEL const &rhs) noexcept;
+
+bool operator==(VkPerformanceStreamMarkerInfoINTEL const &lhs,
+                VkPerformanceStreamMarkerInfoINTEL const &rhs) noexcept;
+bool operator!=(VkPerformanceStreamMarkerInfoINTEL const &lhs,
+                VkPerformanceStreamMarkerInfoINTEL const &rhs) noexcept;
+
+bool operator==(VkPerformanceOverrideInfoINTEL const &lhs,
+                VkPerformanceOverrideInfoINTEL const &rhs) noexcept;
+bool operator!=(VkPerformanceOverrideInfoINTEL const &lhs,
+                VkPerformanceOverrideInfoINTEL const &rhs) noexcept;
+
+bool operator==(VkPerformanceConfigurationAcquireInfoINTEL const &lhs,
+                VkPerformanceConfigurationAcquireInfoINTEL const &rhs) noexcept;
+bool operator!=(VkPerformanceConfigurationAcquireInfoINTEL const &lhs,
+                VkPerformanceConfigurationAcquireInfoINTEL const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderClockFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderClockFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderClockFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderClockFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &lhs,
+                VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &lhs,
+                VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &lhs,
+                VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &lhs,
+                VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &lhs,
+                VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &lhs,
+                VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &lhs,
+                VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &lhs,
+                VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &rhs) noexcept;
+
+bool operator==(VkAttachmentReferenceStencilLayout const &lhs,
+                VkAttachmentReferenceStencilLayout const &rhs) noexcept;
+bool operator!=(VkAttachmentReferenceStencilLayout const &lhs,
+                VkAttachmentReferenceStencilLayout const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &lhs,
+                VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &lhs,
+                VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkAttachmentDescriptionStencilLayout const &lhs,
+                VkAttachmentDescriptionStencilLayout const &rhs) noexcept;
+bool operator!=(VkAttachmentDescriptionStencilLayout const &lhs,
+                VkAttachmentDescriptionStencilLayout const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &lhs,
+                VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &lhs,
+                VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPipelineInfoKHR const &lhs,
+                VkPipelineInfoKHR const &rhs) noexcept;
+bool operator!=(VkPipelineInfoKHR const &lhs,
+                VkPipelineInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPipelineExecutablePropertiesKHR const &lhs,
+                VkPipelineExecutablePropertiesKHR const &rhs) noexcept;
+bool operator!=(VkPipelineExecutablePropertiesKHR const &lhs,
+                VkPipelineExecutablePropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkPipelineExecutableInfoKHR const &lhs,
+                VkPipelineExecutableInfoKHR const &rhs) noexcept;
+bool operator!=(VkPipelineExecutableInfoKHR const &lhs,
+                VkPipelineExecutableInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPipelineExecutableInternalRepresentationKHR const &lhs,
+                VkPipelineExecutableInternalRepresentationKHR const &rhs) noexcept;
+bool operator!=(VkPipelineExecutableInternalRepresentationKHR const &lhs,
+                VkPipelineExecutableInternalRepresentationKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &lhs,
+                VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &lhs,
+                VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const &lhs,
+                VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const &lhs,
+                VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const &lhs,
+                VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const &lhs,
+                VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const &lhs,
+                VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const &lhs,
+                VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const &lhs,
+                VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const &lhs,
+                VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkSubpassShadingPipelineCreateInfoHUAWEI const &lhs,
+                VkSubpassShadingPipelineCreateInfoHUAWEI const &rhs) noexcept;
+bool operator!=(VkSubpassShadingPipelineCreateInfoHUAWEI const &lhs,
+                VkSubpassShadingPipelineCreateInfoHUAWEI const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &lhs,
+                VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &lhs,
+                VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &rhs) noexcept;
+
+bool operator==(VkMemoryOpaqueCaptureAddressAllocateInfo const &lhs,
+                VkMemoryOpaqueCaptureAddressAllocateInfo const &rhs) noexcept;
+bool operator!=(VkMemoryOpaqueCaptureAddressAllocateInfo const &lhs,
+                VkMemoryOpaqueCaptureAddressAllocateInfo const &rhs) noexcept;
+
+bool operator==(VkDeviceMemoryOpaqueCaptureAddressInfo const &lhs,
+                VkDeviceMemoryOpaqueCaptureAddressInfo const &rhs) noexcept;
+bool operator!=(VkDeviceMemoryOpaqueCaptureAddressInfo const &lhs,
+                VkDeviceMemoryOpaqueCaptureAddressInfo const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceLineRasterizationFeaturesEXT const &lhs,
+                VkPhysicalDeviceLineRasterizationFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceLineRasterizationFeaturesEXT const &lhs,
+                VkPhysicalDeviceLineRasterizationFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceLineRasterizationPropertiesEXT const &lhs,
+                VkPhysicalDeviceLineRasterizationPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceLineRasterizationPropertiesEXT const &lhs,
+                VkPhysicalDeviceLineRasterizationPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineRasterizationLineStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationLineStateCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineRasterizationLineStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationLineStateCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const &lhs,
+                VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const &lhs,
+                VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceVulkan11Features const &lhs,
+                VkPhysicalDeviceVulkan11Features const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVulkan11Features const &lhs,
+                VkPhysicalDeviceVulkan11Features const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceVulkan11Properties const &lhs,
+                VkPhysicalDeviceVulkan11Properties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVulkan11Properties const &lhs,
+                VkPhysicalDeviceVulkan11Properties const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceVulkan12Features const &lhs,
+                VkPhysicalDeviceVulkan12Features const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVulkan12Features const &lhs,
+                VkPhysicalDeviceVulkan12Features const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceVulkan12Properties const &lhs,
+                VkPhysicalDeviceVulkan12Properties const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVulkan12Properties const &lhs,
+                VkPhysicalDeviceVulkan12Properties const &rhs) noexcept;
+
+bool operator==(VkPipelineCompilerControlCreateInfoAMD const &lhs,
+                VkPipelineCompilerControlCreateInfoAMD const &rhs) noexcept;
+bool operator!=(VkPipelineCompilerControlCreateInfoAMD const &lhs,
+                VkPipelineCompilerControlCreateInfoAMD const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceCoherentMemoryFeaturesAMD const &lhs,
+                VkPhysicalDeviceCoherentMemoryFeaturesAMD const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceCoherentMemoryFeaturesAMD const &lhs,
+                VkPhysicalDeviceCoherentMemoryFeaturesAMD const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceToolPropertiesEXT const &lhs,
+                VkPhysicalDeviceToolPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceToolPropertiesEXT const &lhs,
+                VkPhysicalDeviceToolPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceCustomBorderColorPropertiesEXT const &lhs,
+                VkPhysicalDeviceCustomBorderColorPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceCustomBorderColorPropertiesEXT const &lhs,
+                VkPhysicalDeviceCustomBorderColorPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceCustomBorderColorFeaturesEXT const &lhs,
+                VkPhysicalDeviceCustomBorderColorFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceCustomBorderColorFeaturesEXT const &lhs,
+                VkPhysicalDeviceCustomBorderColorFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkSamplerBorderColorComponentMappingCreateInfoEXT const &lhs,
+                VkSamplerBorderColorComponentMappingCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkSamplerBorderColorComponentMappingCreateInfoEXT const &lhs,
+                VkSamplerBorderColorComponentMappingCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &lhs,
+                VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &lhs,
+                VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureBuildRangeInfoKHR const &lhs,
+                VkAccelerationStructureBuildRangeInfoKHR const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureBuildRangeInfoKHR const &lhs,
+                VkAccelerationStructureBuildRangeInfoKHR const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureCreateInfoKHR const &lhs,
+                VkAccelerationStructureCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureCreateInfoKHR const &lhs,
+                VkAccelerationStructureCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkAabbPositionsKHR const &lhs,
+                VkAabbPositionsKHR const &rhs) noexcept;
+bool operator!=(VkAabbPositionsKHR const &lhs,
+                VkAabbPositionsKHR const &rhs) noexcept;
+
+bool operator==(VkTransformMatrixKHR const &lhs,
+                VkTransformMatrixKHR const &rhs) noexcept;
+bool operator!=(VkTransformMatrixKHR const &lhs,
+                VkTransformMatrixKHR const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureInstanceKHR const &lhs,
+                VkAccelerationStructureInstanceKHR const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureInstanceKHR const &lhs,
+                VkAccelerationStructureInstanceKHR const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureDeviceAddressInfoKHR const &lhs,
+                VkAccelerationStructureDeviceAddressInfoKHR const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureDeviceAddressInfoKHR const &lhs,
+                VkAccelerationStructureDeviceAddressInfoKHR const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureVersionInfoKHR const &lhs,
+                VkAccelerationStructureVersionInfoKHR const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureVersionInfoKHR const &lhs,
+                VkAccelerationStructureVersionInfoKHR const &rhs) noexcept;
+
+bool operator==(VkCopyAccelerationStructureInfoKHR const &lhs,
+                VkCopyAccelerationStructureInfoKHR const &rhs) noexcept;
+bool operator!=(VkCopyAccelerationStructureInfoKHR const &lhs,
+                VkCopyAccelerationStructureInfoKHR const &rhs) noexcept;
+
+bool operator==(VkRayTracingPipelineInterfaceCreateInfoKHR const &lhs,
+                VkRayTracingPipelineInterfaceCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkRayTracingPipelineInterfaceCreateInfoKHR const &lhs,
+                VkRayTracingPipelineInterfaceCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPipelineLibraryCreateInfoKHR const &lhs,
+                VkPipelineLibraryCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkPipelineLibraryCreateInfoKHR const &lhs,
+                VkPipelineLibraryCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &lhs,
+                VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &lhs,
+                VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &lhs,
+                VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &lhs,
+                VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkRenderPassTransformBeginInfoQCOM const &lhs,
+                VkRenderPassTransformBeginInfoQCOM const &rhs) noexcept;
+bool operator!=(VkRenderPassTransformBeginInfoQCOM const &lhs,
+                VkRenderPassTransformBeginInfoQCOM const &rhs) noexcept;
+
+bool operator==(VkCopyCommandTransformInfoQCOM const &lhs,
+                VkCopyCommandTransformInfoQCOM const &rhs) noexcept;
+bool operator!=(VkCopyCommandTransformInfoQCOM const &lhs,
+                VkCopyCommandTransformInfoQCOM const &rhs) noexcept;
+
+bool operator==(VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &lhs,
+                VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &rhs) noexcept;
+bool operator!=(VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &lhs,
+                VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &lhs,
+                VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &lhs,
+                VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkDeviceDiagnosticsConfigCreateInfoNV const &lhs,
+                VkDeviceDiagnosticsConfigCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkDeviceDiagnosticsConfigCreateInfoNV const &lhs,
+                VkDeviceDiagnosticsConfigCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const &lhs,
+                VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const &lhs,
+                VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceRobustness2FeaturesEXT const &lhs,
+                VkPhysicalDeviceRobustness2FeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceRobustness2FeaturesEXT const &lhs,
+                VkPhysicalDeviceRobustness2FeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceRobustness2PropertiesEXT const &lhs,
+                VkPhysicalDeviceRobustness2PropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceRobustness2PropertiesEXT const &lhs,
+                VkPhysicalDeviceRobustness2PropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceImageRobustnessFeaturesEXT const &lhs,
+                VkPhysicalDeviceImageRobustnessFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceImageRobustnessFeaturesEXT const &lhs,
+                VkPhysicalDeviceImageRobustnessFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &lhs,
+                VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &lhs,
+                VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &rhs) noexcept;
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkPhysicalDevicePortabilitySubsetFeaturesKHR const &lhs,
+                VkPhysicalDevicePortabilitySubsetFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePortabilitySubsetFeaturesKHR const &lhs,
+                VkPhysicalDevicePortabilitySubsetFeaturesKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkPhysicalDevicePortabilitySubsetPropertiesKHR const &lhs,
+                VkPhysicalDevicePortabilitySubsetPropertiesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDevicePortabilitySubsetPropertiesKHR const &lhs,
+                VkPhysicalDevicePortabilitySubsetPropertiesKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+bool operator==(VkPhysicalDevice4444FormatsFeaturesEXT const &lhs,
+                VkPhysicalDevice4444FormatsFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDevice4444FormatsFeaturesEXT const &lhs,
+                VkPhysicalDevice4444FormatsFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &lhs,
+                VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &lhs,
+                VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &rhs) noexcept;
+
+bool operator==(VkBufferCopy2KHR const &lhs,
+                VkBufferCopy2KHR const &rhs) noexcept;
+bool operator!=(VkBufferCopy2KHR const &lhs,
+                VkBufferCopy2KHR const &rhs) noexcept;
+
+bool operator==(VkImageCopy2KHR const &lhs,
+                VkImageCopy2KHR const &rhs) noexcept;
+bool operator!=(VkImageCopy2KHR const &lhs,
+                VkImageCopy2KHR const &rhs) noexcept;
+
+bool operator==(VkImageBlit2KHR const &lhs,
+                VkImageBlit2KHR const &rhs) noexcept;
+bool operator!=(VkImageBlit2KHR const &lhs,
+                VkImageBlit2KHR const &rhs) noexcept;
+
+bool operator==(VkBufferImageCopy2KHR const &lhs,
+                VkBufferImageCopy2KHR const &rhs) noexcept;
+bool operator!=(VkBufferImageCopy2KHR const &lhs,
+                VkBufferImageCopy2KHR const &rhs) noexcept;
+
+bool operator==(VkImageResolve2KHR const &lhs,
+                VkImageResolve2KHR const &rhs) noexcept;
+bool operator!=(VkImageResolve2KHR const &lhs,
+                VkImageResolve2KHR const &rhs) noexcept;
+
+bool operator==(VkCopyBufferInfo2KHR const &lhs,
+                VkCopyBufferInfo2KHR const &rhs) noexcept;
+bool operator!=(VkCopyBufferInfo2KHR const &lhs,
+                VkCopyBufferInfo2KHR const &rhs) noexcept;
+
+bool operator==(VkCopyImageInfo2KHR const &lhs,
+                VkCopyImageInfo2KHR const &rhs) noexcept;
+bool operator!=(VkCopyImageInfo2KHR const &lhs,
+                VkCopyImageInfo2KHR const &rhs) noexcept;
+
+bool operator==(VkBlitImageInfo2KHR const &lhs,
+                VkBlitImageInfo2KHR const &rhs) noexcept;
+bool operator!=(VkBlitImageInfo2KHR const &lhs,
+                VkBlitImageInfo2KHR const &rhs) noexcept;
+
+bool operator==(VkCopyBufferToImageInfo2KHR const &lhs,
+                VkCopyBufferToImageInfo2KHR const &rhs) noexcept;
+bool operator!=(VkCopyBufferToImageInfo2KHR const &lhs,
+                VkCopyBufferToImageInfo2KHR const &rhs) noexcept;
+
+bool operator==(VkCopyImageToBufferInfo2KHR const &lhs,
+                VkCopyImageToBufferInfo2KHR const &rhs) noexcept;
+bool operator!=(VkCopyImageToBufferInfo2KHR const &lhs,
+                VkCopyImageToBufferInfo2KHR const &rhs) noexcept;
+
+bool operator==(VkResolveImageInfo2KHR const &lhs,
+                VkResolveImageInfo2KHR const &rhs) noexcept;
+bool operator!=(VkResolveImageInfo2KHR const &lhs,
+                VkResolveImageInfo2KHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkFragmentShadingRateAttachmentInfoKHR const &lhs,
+                VkFragmentShadingRateAttachmentInfoKHR const &rhs) noexcept;
+bool operator!=(VkFragmentShadingRateAttachmentInfoKHR const &lhs,
+                VkFragmentShadingRateAttachmentInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPipelineFragmentShadingRateStateCreateInfoKHR const &lhs,
+                VkPipelineFragmentShadingRateStateCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkPipelineFragmentShadingRateStateCreateInfoKHR const &lhs,
+                VkPipelineFragmentShadingRateStateCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentShadingRateKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRateKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentShadingRateKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRateKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &lhs,
+                VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &lhs,
+                VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &lhs,
+                VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &lhs,
+                VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &rhs) noexcept;
+
+bool operator==(VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &lhs,
+                VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &rhs) noexcept;
+bool operator!=(VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &lhs,
+                VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureBuildSizesInfoKHR const &lhs,
+                VkAccelerationStructureBuildSizesInfoKHR const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureBuildSizesInfoKHR const &lhs,
+                VkAccelerationStructureBuildSizesInfoKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &lhs,
+                VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &lhs,
+                VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &rhs) noexcept;
+
+bool operator==(VkMutableDescriptorTypeListVALVE const &lhs,
+                VkMutableDescriptorTypeListVALVE const &rhs) noexcept;
+bool operator!=(VkMutableDescriptorTypeListVALVE const &lhs,
+                VkMutableDescriptorTypeListVALVE const &rhs) noexcept;
+
+bool operator==(VkMutableDescriptorTypeCreateInfoVALVE const &lhs,
+                VkMutableDescriptorTypeCreateInfoVALVE const &rhs) noexcept;
+bool operator!=(VkMutableDescriptorTypeCreateInfoVALVE const &lhs,
+                VkMutableDescriptorTypeCreateInfoVALVE const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &lhs,
+                VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &lhs,
+                VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &lhs,
+                VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &lhs,
+                VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkVertexInputBindingDescription2EXT const &lhs,
+                VkVertexInputBindingDescription2EXT const &rhs) noexcept;
+bool operator!=(VkVertexInputBindingDescription2EXT const &lhs,
+                VkVertexInputBindingDescription2EXT const &rhs) noexcept;
+
+bool operator==(VkVertexInputAttributeDescription2EXT const &lhs,
+                VkVertexInputAttributeDescription2EXT const &rhs) noexcept;
+bool operator!=(VkVertexInputAttributeDescription2EXT const &lhs,
+                VkVertexInputAttributeDescription2EXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceColorWriteEnableFeaturesEXT const &lhs,
+                VkPhysicalDeviceColorWriteEnableFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceColorWriteEnableFeaturesEXT const &lhs,
+                VkPhysicalDeviceColorWriteEnableFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineColorWriteCreateInfoEXT const &lhs,
+                VkPipelineColorWriteCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineColorWriteCreateInfoEXT const &lhs,
+                VkPipelineColorWriteCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkMemoryBarrier2KHR const &lhs,
+                VkMemoryBarrier2KHR const &rhs) noexcept;
+bool operator!=(VkMemoryBarrier2KHR const &lhs,
+                VkMemoryBarrier2KHR const &rhs) noexcept;
+
+bool operator==(VkImageMemoryBarrier2KHR const &lhs,
+                VkImageMemoryBarrier2KHR const &rhs) noexcept;
+bool operator!=(VkImageMemoryBarrier2KHR const &lhs,
+                VkImageMemoryBarrier2KHR const &rhs) noexcept;
+
+bool operator==(VkBufferMemoryBarrier2KHR const &lhs,
+                VkBufferMemoryBarrier2KHR const &rhs) noexcept;
+bool operator!=(VkBufferMemoryBarrier2KHR const &lhs,
+                VkBufferMemoryBarrier2KHR const &rhs) noexcept;
+
+bool operator==(VkDependencyInfoKHR const &lhs,
+                VkDependencyInfoKHR const &rhs) noexcept;
+bool operator!=(VkDependencyInfoKHR const &lhs,
+                VkDependencyInfoKHR const &rhs) noexcept;
+
+bool operator==(VkSemaphoreSubmitInfoKHR const &lhs,
+                VkSemaphoreSubmitInfoKHR const &rhs) noexcept;
+bool operator!=(VkSemaphoreSubmitInfoKHR const &lhs,
+                VkSemaphoreSubmitInfoKHR const &rhs) noexcept;
+
+bool operator==(VkCommandBufferSubmitInfoKHR const &lhs,
+                VkCommandBufferSubmitInfoKHR const &rhs) noexcept;
+bool operator!=(VkCommandBufferSubmitInfoKHR const &lhs,
+                VkCommandBufferSubmitInfoKHR const &rhs) noexcept;
+
+bool operator==(VkSubmitInfo2KHR const &lhs,
+                VkSubmitInfo2KHR const &rhs) noexcept;
+bool operator!=(VkSubmitInfo2KHR const &lhs,
+                VkSubmitInfo2KHR const &rhs) noexcept;
+
+bool operator==(VkQueueFamilyCheckpointProperties2NV const &lhs,
+                VkQueueFamilyCheckpointProperties2NV const &rhs) noexcept;
+bool operator!=(VkQueueFamilyCheckpointProperties2NV const &lhs,
+                VkQueueFamilyCheckpointProperties2NV const &rhs) noexcept;
+
+bool operator==(VkCheckpointData2NV const &lhs,
+                VkCheckpointData2NV const &rhs) noexcept;
+bool operator!=(VkCheckpointData2NV const &lhs,
+                VkCheckpointData2NV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceSynchronization2FeaturesKHR const &lhs,
+                VkPhysicalDeviceSynchronization2FeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceSynchronization2FeaturesKHR const &lhs,
+                VkPhysicalDeviceSynchronization2FeaturesKHR const &rhs) noexcept;
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoQueueFamilyProperties2KHR const &lhs,
+                VkVideoQueueFamilyProperties2KHR const &rhs) noexcept;
+bool operator!=(VkVideoQueueFamilyProperties2KHR const &lhs,
+                VkVideoQueueFamilyProperties2KHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoProfilesKHR const &lhs,
+                VkVideoProfilesKHR const &rhs) noexcept;
+bool operator!=(VkVideoProfilesKHR const &lhs,
+                VkVideoProfilesKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkPhysicalDeviceVideoFormatInfoKHR const &lhs,
+                VkPhysicalDeviceVideoFormatInfoKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceVideoFormatInfoKHR const &lhs,
+                VkPhysicalDeviceVideoFormatInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoFormatPropertiesKHR const &lhs,
+                VkVideoFormatPropertiesKHR const &rhs) noexcept;
+bool operator!=(VkVideoFormatPropertiesKHR const &lhs,
+                VkVideoFormatPropertiesKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoProfileKHR const &lhs,
+                VkVideoProfileKHR const &rhs) noexcept;
+bool operator!=(VkVideoProfileKHR const &lhs,
+                VkVideoProfileKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoCapabilitiesKHR const &lhs,
+                VkVideoCapabilitiesKHR const &rhs) noexcept;
+bool operator!=(VkVideoCapabilitiesKHR const &lhs,
+                VkVideoCapabilitiesKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoGetMemoryPropertiesKHR const &lhs,
+                VkVideoGetMemoryPropertiesKHR const &rhs) noexcept;
+bool operator!=(VkVideoGetMemoryPropertiesKHR const &lhs,
+                VkVideoGetMemoryPropertiesKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoBindMemoryKHR const &lhs,
+                VkVideoBindMemoryKHR const &rhs) noexcept;
+bool operator!=(VkVideoBindMemoryKHR const &lhs,
+                VkVideoBindMemoryKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoPictureResourceKHR const &lhs,
+                VkVideoPictureResourceKHR const &rhs) noexcept;
+bool operator!=(VkVideoPictureResourceKHR const &lhs,
+                VkVideoPictureResourceKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoReferenceSlotKHR const &lhs,
+                VkVideoReferenceSlotKHR const &rhs) noexcept;
+bool operator!=(VkVideoReferenceSlotKHR const &lhs,
+                VkVideoReferenceSlotKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeInfoKHR const &lhs,
+                VkVideoDecodeInfoKHR const &rhs) noexcept;
+bool operator!=(VkVideoDecodeInfoKHR const &lhs,
+                VkVideoDecodeInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264ProfileEXT const &lhs,
+                VkVideoDecodeH264ProfileEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH264ProfileEXT const &lhs,
+                VkVideoDecodeH264ProfileEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264CapabilitiesEXT const &lhs,
+                VkVideoDecodeH264CapabilitiesEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH264CapabilitiesEXT const &lhs,
+                VkVideoDecodeH264CapabilitiesEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264SessionCreateInfoEXT const &lhs,
+                VkVideoDecodeH264SessionCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH264SessionCreateInfoEXT const &lhs,
+                VkVideoDecodeH264SessionCreateInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264SessionParametersAddInfoEXT const &lhs,
+                VkVideoDecodeH264SessionParametersAddInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH264SessionParametersAddInfoEXT const &lhs,
+                VkVideoDecodeH264SessionParametersAddInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264SessionParametersCreateInfoEXT const &lhs,
+                VkVideoDecodeH264SessionParametersCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH264SessionParametersCreateInfoEXT const &lhs,
+                VkVideoDecodeH264SessionParametersCreateInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264PictureInfoEXT const &lhs,
+                VkVideoDecodeH264PictureInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH264PictureInfoEXT const &lhs,
+                VkVideoDecodeH264PictureInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264DpbSlotInfoEXT const &lhs,
+                VkVideoDecodeH264DpbSlotInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH264DpbSlotInfoEXT const &lhs,
+                VkVideoDecodeH264DpbSlotInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264MvcEXT const &lhs,
+                VkVideoDecodeH264MvcEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH264MvcEXT const &lhs,
+                VkVideoDecodeH264MvcEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265ProfileEXT const &lhs,
+                VkVideoDecodeH265ProfileEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH265ProfileEXT const &lhs,
+                VkVideoDecodeH265ProfileEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265CapabilitiesEXT const &lhs,
+                VkVideoDecodeH265CapabilitiesEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH265CapabilitiesEXT const &lhs,
+                VkVideoDecodeH265CapabilitiesEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265SessionCreateInfoEXT const &lhs,
+                VkVideoDecodeH265SessionCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH265SessionCreateInfoEXT const &lhs,
+                VkVideoDecodeH265SessionCreateInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265SessionParametersAddInfoEXT const &lhs,
+                VkVideoDecodeH265SessionParametersAddInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH265SessionParametersAddInfoEXT const &lhs,
+                VkVideoDecodeH265SessionParametersAddInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265SessionParametersCreateInfoEXT const &lhs,
+                VkVideoDecodeH265SessionParametersCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH265SessionParametersCreateInfoEXT const &lhs,
+                VkVideoDecodeH265SessionParametersCreateInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265PictureInfoEXT const &lhs,
+                VkVideoDecodeH265PictureInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH265PictureInfoEXT const &lhs,
+                VkVideoDecodeH265PictureInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265DpbSlotInfoEXT const &lhs,
+                VkVideoDecodeH265DpbSlotInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoDecodeH265DpbSlotInfoEXT const &lhs,
+                VkVideoDecodeH265DpbSlotInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoSessionCreateInfoKHR const &lhs,
+                VkVideoSessionCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkVideoSessionCreateInfoKHR const &lhs,
+                VkVideoSessionCreateInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoSessionParametersCreateInfoKHR const &lhs,
+                VkVideoSessionParametersCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkVideoSessionParametersCreateInfoKHR const &lhs,
+                VkVideoSessionParametersCreateInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoSessionParametersUpdateInfoKHR const &lhs,
+                VkVideoSessionParametersUpdateInfoKHR const &rhs) noexcept;
+bool operator!=(VkVideoSessionParametersUpdateInfoKHR const &lhs,
+                VkVideoSessionParametersUpdateInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoBeginCodingInfoKHR const &lhs,
+                VkVideoBeginCodingInfoKHR const &rhs) noexcept;
+bool operator!=(VkVideoBeginCodingInfoKHR const &lhs,
+                VkVideoBeginCodingInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEndCodingInfoKHR const &lhs,
+                VkVideoEndCodingInfoKHR const &rhs) noexcept;
+bool operator!=(VkVideoEndCodingInfoKHR const &lhs,
+                VkVideoEndCodingInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoCodingControlInfoKHR const &lhs,
+                VkVideoCodingControlInfoKHR const &rhs) noexcept;
+bool operator!=(VkVideoCodingControlInfoKHR const &lhs,
+                VkVideoCodingControlInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeInfoKHR const &lhs,
+                VkVideoEncodeInfoKHR const &rhs) noexcept;
+bool operator!=(VkVideoEncodeInfoKHR const &lhs,
+                VkVideoEncodeInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeRateControlInfoKHR const &lhs,
+                VkVideoEncodeRateControlInfoKHR const &rhs) noexcept;
+bool operator!=(VkVideoEncodeRateControlInfoKHR const &lhs,
+                VkVideoEncodeRateControlInfoKHR const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264CapabilitiesEXT const &lhs,
+                VkVideoEncodeH264CapabilitiesEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH264CapabilitiesEXT const &lhs,
+                VkVideoEncodeH264CapabilitiesEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264SessionCreateInfoEXT const &lhs,
+                VkVideoEncodeH264SessionCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH264SessionCreateInfoEXT const &lhs,
+                VkVideoEncodeH264SessionCreateInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264SessionParametersAddInfoEXT const &lhs,
+                VkVideoEncodeH264SessionParametersAddInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH264SessionParametersAddInfoEXT const &lhs,
+                VkVideoEncodeH264SessionParametersAddInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264SessionParametersCreateInfoEXT const &lhs,
+                VkVideoEncodeH264SessionParametersCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH264SessionParametersCreateInfoEXT const &lhs,
+                VkVideoEncodeH264SessionParametersCreateInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264DpbSlotInfoEXT const &lhs,
+                VkVideoEncodeH264DpbSlotInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH264DpbSlotInfoEXT const &lhs,
+                VkVideoEncodeH264DpbSlotInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264VclFrameInfoEXT const &lhs,
+                VkVideoEncodeH264VclFrameInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH264VclFrameInfoEXT const &lhs,
+                VkVideoEncodeH264VclFrameInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264EmitPictureParametersEXT const &lhs,
+                VkVideoEncodeH264EmitPictureParametersEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH264EmitPictureParametersEXT const &lhs,
+                VkVideoEncodeH264EmitPictureParametersEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264ProfileEXT const &lhs,
+                VkVideoEncodeH264ProfileEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH264ProfileEXT const &lhs,
+                VkVideoEncodeH264ProfileEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264NaluSliceEXT const &lhs,
+                VkVideoEncodeH264NaluSliceEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH264NaluSliceEXT const &lhs,
+                VkVideoEncodeH264NaluSliceEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265CapabilitiesEXT const &lhs,
+                VkVideoEncodeH265CapabilitiesEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265CapabilitiesEXT const &lhs,
+                VkVideoEncodeH265CapabilitiesEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265SessionCreateInfoEXT const &lhs,
+                VkVideoEncodeH265SessionCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265SessionCreateInfoEXT const &lhs,
+                VkVideoEncodeH265SessionCreateInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265SessionParametersAddInfoEXT const &lhs,
+                VkVideoEncodeH265SessionParametersAddInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265SessionParametersAddInfoEXT const &lhs,
+                VkVideoEncodeH265SessionParametersAddInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265SessionParametersCreateInfoEXT const &lhs,
+                VkVideoEncodeH265SessionParametersCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265SessionParametersCreateInfoEXT const &lhs,
+                VkVideoEncodeH265SessionParametersCreateInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265VclFrameInfoEXT const &lhs,
+                VkVideoEncodeH265VclFrameInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265VclFrameInfoEXT const &lhs,
+                VkVideoEncodeH265VclFrameInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265EmitPictureParametersEXT const &lhs,
+                VkVideoEncodeH265EmitPictureParametersEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265EmitPictureParametersEXT const &lhs,
+                VkVideoEncodeH265EmitPictureParametersEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265NaluSliceEXT const &lhs,
+                VkVideoEncodeH265NaluSliceEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265NaluSliceEXT const &lhs,
+                VkVideoEncodeH265NaluSliceEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265ProfileEXT const &lhs,
+                VkVideoEncodeH265ProfileEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265ProfileEXT const &lhs,
+                VkVideoEncodeH265ProfileEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265DpbSlotInfoEXT const &lhs,
+                VkVideoEncodeH265DpbSlotInfoEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265DpbSlotInfoEXT const &lhs,
+                VkVideoEncodeH265DpbSlotInfoEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265ReferenceListsEXT const &lhs,
+                VkVideoEncodeH265ReferenceListsEXT const &rhs) noexcept;
+bool operator!=(VkVideoEncodeH265ReferenceListsEXT const &lhs,
+                VkVideoEncodeH265ReferenceListsEXT const &rhs) noexcept;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+bool operator==(VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &lhs,
+                VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &lhs,
+                VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkCommandBufferInheritanceViewportScissorInfoNV const &lhs,
+                VkCommandBufferInheritanceViewportScissorInfoNV const &rhs) noexcept;
+bool operator!=(VkCommandBufferInheritanceViewportScissorInfoNV const &lhs,
+                VkCommandBufferInheritanceViewportScissorInfoNV const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &lhs,
+                VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &lhs,
+                VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceProvokingVertexFeaturesEXT const &lhs,
+                VkPhysicalDeviceProvokingVertexFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceProvokingVertexFeaturesEXT const &lhs,
+                VkPhysicalDeviceProvokingVertexFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceProvokingVertexPropertiesEXT const &lhs,
+                VkPhysicalDeviceProvokingVertexPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceProvokingVertexPropertiesEXT const &lhs,
+                VkPhysicalDeviceProvokingVertexPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &rhs) noexcept;
+bool operator!=(VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &rhs) noexcept;
+
+bool operator==(VkCuModuleCreateInfoNVX const &lhs,
+                VkCuModuleCreateInfoNVX const &rhs) noexcept;
+bool operator!=(VkCuModuleCreateInfoNVX const &lhs,
+                VkCuModuleCreateInfoNVX const &rhs) noexcept;
+
+bool operator==(VkCuFunctionCreateInfoNVX const &lhs,
+                VkCuFunctionCreateInfoNVX const &rhs) noexcept;
+bool operator!=(VkCuFunctionCreateInfoNVX const &lhs,
+                VkCuFunctionCreateInfoNVX const &rhs) noexcept;
+
+bool operator==(VkCuLaunchInfoNVX const &lhs,
+                VkCuLaunchInfoNVX const &rhs) noexcept;
+bool operator!=(VkCuLaunchInfoNVX const &lhs,
+                VkCuLaunchInfoNVX const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const &lhs,
+                VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const &lhs,
+                VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDrmPropertiesEXT const &lhs,
+                VkPhysicalDeviceDrmPropertiesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDrmPropertiesEXT const &lhs,
+                VkPhysicalDeviceDrmPropertiesEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &lhs,
+                VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &lhs,
+                VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureMotionInfoNV const &lhs,
+                VkAccelerationStructureMotionInfoNV const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureMotionInfoNV const &lhs,
+                VkAccelerationStructureMotionInfoNV const &rhs) noexcept;
+
+bool operator==(VkSRTDataNV const &lhs,
+                VkSRTDataNV const &rhs) noexcept;
+bool operator!=(VkSRTDataNV const &lhs,
+                VkSRTDataNV const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureSRTMotionInstanceNV const &lhs,
+                VkAccelerationStructureSRTMotionInstanceNV const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureSRTMotionInstanceNV const &lhs,
+                VkAccelerationStructureSRTMotionInstanceNV const &rhs) noexcept;
+
+bool operator==(VkAccelerationStructureMatrixMotionInstanceNV const &lhs,
+                VkAccelerationStructureMatrixMotionInstanceNV const &rhs) noexcept;
+bool operator!=(VkAccelerationStructureMatrixMotionInstanceNV const &lhs,
+                VkAccelerationStructureMatrixMotionInstanceNV const &rhs) noexcept;
+
+bool operator==(VkMemoryGetRemoteAddressInfoNV const &lhs,
+                VkMemoryGetRemoteAddressInfoNV const &rhs) noexcept;
+bool operator!=(VkMemoryGetRemoteAddressInfoNV const &lhs,
+                VkMemoryGetRemoteAddressInfoNV const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImportMemoryBufferCollectionFUCHSIA const &lhs,
+                VkImportMemoryBufferCollectionFUCHSIA const &rhs) noexcept;
+bool operator!=(VkImportMemoryBufferCollectionFUCHSIA const &lhs,
+                VkImportMemoryBufferCollectionFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionImageCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionImageCreateInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkBufferCollectionImageCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionImageCreateInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionBufferCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionBufferCreateInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkBufferCollectionBufferCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionBufferCreateInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionCreateInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkBufferCollectionCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionCreateInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionPropertiesFUCHSIA const &lhs,
+                VkBufferCollectionPropertiesFUCHSIA const &rhs) noexcept;
+bool operator!=(VkBufferCollectionPropertiesFUCHSIA const &lhs,
+                VkBufferCollectionPropertiesFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferConstraintsInfoFUCHSIA const &lhs,
+                VkBufferConstraintsInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkBufferConstraintsInfoFUCHSIA const &lhs,
+                VkBufferConstraintsInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkSysmemColorSpaceFUCHSIA const &lhs,
+                VkSysmemColorSpaceFUCHSIA const &rhs) noexcept;
+bool operator!=(VkSysmemColorSpaceFUCHSIA const &lhs,
+                VkSysmemColorSpaceFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImageFormatConstraintsInfoFUCHSIA const &lhs,
+                VkImageFormatConstraintsInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkImageFormatConstraintsInfoFUCHSIA const &lhs,
+                VkImageFormatConstraintsInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImageConstraintsInfoFUCHSIA const &lhs,
+                VkImageConstraintsInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkImageConstraintsInfoFUCHSIA const &lhs,
+                VkImageConstraintsInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionConstraintsInfoFUCHSIA const &lhs,
+                VkBufferCollectionConstraintsInfoFUCHSIA const &rhs) noexcept;
+bool operator!=(VkBufferCollectionConstraintsInfoFUCHSIA const &lhs,
+                VkBufferCollectionConstraintsInfoFUCHSIA const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+bool operator==(VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &lhs,
+                VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &lhs,
+                VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &rhs) noexcept;
+
+bool operator==(VkFormatProperties3KHR const &lhs,
+                VkFormatProperties3KHR const &rhs) noexcept;
+bool operator!=(VkFormatProperties3KHR const &lhs,
+                VkFormatProperties3KHR const &rhs) noexcept;
+
+bool operator==(VkDrmFormatModifierPropertiesList2EXT const &lhs,
+                VkDrmFormatModifierPropertiesList2EXT const &rhs) noexcept;
+bool operator!=(VkDrmFormatModifierPropertiesList2EXT const &lhs,
+                VkDrmFormatModifierPropertiesList2EXT const &rhs) noexcept;
+
+bool operator==(VkDrmFormatModifierProperties2EXT const &lhs,
+                VkDrmFormatModifierProperties2EXT const &rhs) noexcept;
+bool operator!=(VkDrmFormatModifierProperties2EXT const &lhs,
+                VkDrmFormatModifierProperties2EXT const &rhs) noexcept;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidHardwareBufferFormatProperties2ANDROID const &lhs,
+                VkAndroidHardwareBufferFormatProperties2ANDROID const &rhs) noexcept;
+bool operator!=(VkAndroidHardwareBufferFormatProperties2ANDROID const &lhs,
+                VkAndroidHardwareBufferFormatProperties2ANDROID const &rhs) noexcept;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+bool operator==(VkPipelineRenderingCreateInfoKHR const &lhs,
+                VkPipelineRenderingCreateInfoKHR const &rhs) noexcept;
+bool operator!=(VkPipelineRenderingCreateInfoKHR const &lhs,
+                VkPipelineRenderingCreateInfoKHR const &rhs) noexcept;
+
+bool operator==(VkRenderingInfoKHR const &lhs,
+                VkRenderingInfoKHR const &rhs) noexcept;
+bool operator!=(VkRenderingInfoKHR const &lhs,
+                VkRenderingInfoKHR const &rhs) noexcept;
+
+bool operator==(VkRenderingFragmentShadingRateAttachmentInfoKHR const &lhs,
+                VkRenderingFragmentShadingRateAttachmentInfoKHR const &rhs) noexcept;
+bool operator!=(VkRenderingFragmentShadingRateAttachmentInfoKHR const &lhs,
+                VkRenderingFragmentShadingRateAttachmentInfoKHR const &rhs) noexcept;
+
+bool operator==(VkRenderingFragmentDensityMapAttachmentInfoEXT const &lhs,
+                VkRenderingFragmentDensityMapAttachmentInfoEXT const &rhs) noexcept;
+bool operator!=(VkRenderingFragmentDensityMapAttachmentInfoEXT const &lhs,
+                VkRenderingFragmentDensityMapAttachmentInfoEXT const &rhs) noexcept;
+
+bool operator==(VkPhysicalDeviceDynamicRenderingFeaturesKHR const &lhs,
+                VkPhysicalDeviceDynamicRenderingFeaturesKHR const &rhs) noexcept;
+bool operator!=(VkPhysicalDeviceDynamicRenderingFeaturesKHR const &lhs,
+                VkPhysicalDeviceDynamicRenderingFeaturesKHR const &rhs) noexcept;
+
+bool operator==(VkCommandBufferInheritanceRenderingInfoKHR const &lhs,
+                VkCommandBufferInheritanceRenderingInfoKHR const &rhs) noexcept;
+bool operator!=(VkCommandBufferInheritanceRenderingInfoKHR const &lhs,
+                VkCommandBufferInheritanceRenderingInfoKHR const &rhs) noexcept;
+
+bool operator==(VkAttachmentSampleCountInfoAMD const &lhs,
+                VkAttachmentSampleCountInfoAMD const &rhs) noexcept;
+bool operator!=(VkAttachmentSampleCountInfoAMD const &lhs,
+                VkAttachmentSampleCountInfoAMD const &rhs) noexcept;
+
+bool operator==(VkMultiviewPerViewAttributesInfoNVX const &lhs,
+                VkMultiviewPerViewAttributesInfoNVX const &rhs) noexcept;
+bool operator!=(VkMultiviewPerViewAttributesInfoNVX const &lhs,
+                VkMultiviewPerViewAttributesInfoNVX const &rhs) noexcept;
+
+#ifdef VK_EQUALITY_CHECK_CONFIG_MAIN
+
+#include <cstdint>
+#include <cstring>
+
+bool operator==(VkBaseOutStructure const &lhs,
+                VkBaseOutStructure const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pNext == rhs.pNext);
+}
+
+bool operator!=(VkBaseOutStructure const &lhs,
+                VkBaseOutStructure const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBaseInStructure const &lhs,
+                VkBaseInStructure const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pNext == rhs.pNext);
+}
+
+bool operator!=(VkBaseInStructure const &lhs,
+                VkBaseInStructure const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkOffset2D const &lhs,
+                VkOffset2D const &rhs) noexcept {
+  return (lhs.x == rhs.x) &&
+         (lhs.y == rhs.y);
+}
+
+bool operator!=(VkOffset2D const &lhs,
+                VkOffset2D const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkOffset3D const &lhs,
+                VkOffset3D const &rhs) noexcept {
+  return (lhs.x == rhs.x) &&
+         (lhs.y == rhs.y) &&
+         (lhs.z == rhs.z);
+}
+
+bool operator!=(VkOffset3D const &lhs,
+                VkOffset3D const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExtent2D const &lhs,
+                VkExtent2D const &rhs) noexcept {
+  return (lhs.width == rhs.width) &&
+         (lhs.height == rhs.height);
+}
+
+bool operator!=(VkExtent2D const &lhs,
+                VkExtent2D const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExtent3D const &lhs,
+                VkExtent3D const &rhs) noexcept {
+  return (lhs.width == rhs.width) &&
+         (lhs.height == rhs.height) &&
+         (lhs.depth == rhs.depth);
+}
+
+bool operator!=(VkExtent3D const &lhs,
+                VkExtent3D const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkViewport const &lhs,
+                VkViewport const &rhs) noexcept {
+  return (lhs.x == rhs.x) &&
+         (lhs.y == rhs.y) &&
+         (lhs.width == rhs.width) &&
+         (lhs.height == rhs.height) &&
+         (lhs.minDepth == rhs.minDepth) &&
+         (lhs.maxDepth == rhs.maxDepth);
+}
+
+bool operator!=(VkViewport const &lhs,
+                VkViewport const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRect2D const &lhs,
+                VkRect2D const &rhs) noexcept {
+  return (lhs.offset == rhs.offset) &&
+         (lhs.extent == rhs.extent);
+}
+
+bool operator!=(VkRect2D const &lhs,
+                VkRect2D const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkClearRect const &lhs,
+                VkClearRect const &rhs) noexcept {
+  return (lhs.rect == rhs.rect) &&
+         (lhs.baseArrayLayer == rhs.baseArrayLayer) &&
+         (lhs.layerCount == rhs.layerCount);
+}
+
+bool operator!=(VkClearRect const &lhs,
+                VkClearRect const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkComponentMapping const &lhs,
+                VkComponentMapping const &rhs) noexcept {
+  return (lhs.r == rhs.r) &&
+         (lhs.g == rhs.g) &&
+         (lhs.b == rhs.b) &&
+         (lhs.a == rhs.a);
+}
+
+bool operator!=(VkComponentMapping const &lhs,
+                VkComponentMapping const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceProperties const &lhs,
+                VkPhysicalDeviceProperties const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_PHYSICAL_DEVICE_NAME_SIZE; ++i) {
+    if(lhs.deviceName[i] != rhs.deviceName[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_UUID_SIZE; ++i) {
+    if(lhs.pipelineCacheUUID[i] != rhs.pipelineCacheUUID[i])
+      return false;
+  }
+
+  return (lhs.apiVersion == rhs.apiVersion) &&
+         (lhs.driverVersion == rhs.driverVersion) &&
+         (lhs.vendorID == rhs.vendorID) &&
+         (lhs.deviceID == rhs.deviceID) &&
+         (lhs.deviceType == rhs.deviceType) &&
+         (lhs.limits == rhs.limits) &&
+         (lhs.sparseProperties == rhs.sparseProperties);
+}
+
+bool operator!=(VkPhysicalDeviceProperties const &lhs,
+                VkPhysicalDeviceProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExtensionProperties const &lhs,
+                VkExtensionProperties const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i) {
+    if(lhs.extensionName[i] != rhs.extensionName[i])
+      return false;
+  }
+
+  return (lhs.specVersion == rhs.specVersion);
+}
+
+bool operator!=(VkExtensionProperties const &lhs,
+                VkExtensionProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkLayerProperties const &lhs,
+                VkLayerProperties const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i) {
+    if(lhs.layerName[i] != rhs.layerName[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i) {
+    if(lhs.description[i] != rhs.description[i])
+      return false;
+  }
+
+  return (lhs.specVersion == rhs.specVersion) &&
+         (lhs.implementationVersion == rhs.implementationVersion);
+}
+
+bool operator!=(VkLayerProperties const &lhs,
+                VkLayerProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkApplicationInfo const &lhs,
+                VkApplicationInfo const &rhs) noexcept {
+  if (lhs.pApplicationName != rhs.pApplicationName) {
+    if(lhs.pApplicationName == nullptr || rhs.pApplicationName == nullptr)
+      return false;
+    if(strcmp(lhs.pApplicationName, rhs.pApplicationName) != 0)
+      return false;
+  }
+
+  if (lhs.pEngineName != rhs.pEngineName) {
+    if(lhs.pEngineName == nullptr || rhs.pEngineName == nullptr)
+      return false;
+    if(strcmp(lhs.pEngineName, rhs.pEngineName) != 0)
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.applicationVersion == rhs.applicationVersion) &&
+         (lhs.engineVersion == rhs.engineVersion) &&
+         (lhs.apiVersion == rhs.apiVersion);
+}
+
+bool operator!=(VkApplicationInfo const &lhs,
+                VkApplicationInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAllocationCallbacks const &lhs,
+                VkAllocationCallbacks const &rhs) noexcept {
+  return (lhs.pUserData == rhs.pUserData) &&
+         (lhs.pfnAllocation == rhs.pfnAllocation) &&
+         (lhs.pfnReallocation == rhs.pfnReallocation) &&
+         (lhs.pfnFree == rhs.pfnFree) &&
+         (lhs.pfnInternalAllocation == rhs.pfnInternalAllocation) &&
+         (lhs.pfnInternalFree == rhs.pfnInternalFree);
+}
+
+bool operator!=(VkAllocationCallbacks const &lhs,
+                VkAllocationCallbacks const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceQueueCreateInfo const &lhs,
+                VkDeviceQueueCreateInfo const &rhs) noexcept {
+  if(lhs.queueCount != rhs.queueCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.queueCount; ++i) {
+    if(lhs.pQueuePriorities[i] != rhs.pQueuePriorities[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.queueFamilyIndex == rhs.queueFamilyIndex);
+}
+
+bool operator!=(VkDeviceQueueCreateInfo const &lhs,
+                VkDeviceQueueCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkQueueFamilyProperties const &lhs,
+                VkQueueFamilyProperties const &rhs) noexcept {
+  return (lhs.queueFlags == rhs.queueFlags) &&
+         (lhs.queueCount == rhs.queueCount) &&
+         (lhs.timestampValidBits == rhs.timestampValidBits) &&
+         (lhs.minImageTransferGranularity == rhs.minImageTransferGranularity);
+}
+
+bool operator!=(VkQueueFamilyProperties const &lhs,
+                VkQueueFamilyProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMemoryProperties const &lhs,
+                VkPhysicalDeviceMemoryProperties const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i) {
+    if(lhs.memoryTypes[i] != rhs.memoryTypes[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i) {
+    if(lhs.memoryHeaps[i] != rhs.memoryHeaps[i])
+      return false;
+  }
+
+  return (lhs.memoryTypeCount == rhs.memoryTypeCount) &&
+         (lhs.memoryHeapCount == rhs.memoryHeapCount);
+}
+
+bool operator!=(VkPhysicalDeviceMemoryProperties const &lhs,
+                VkPhysicalDeviceMemoryProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryAllocateInfo const &lhs,
+                VkMemoryAllocateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.allocationSize == rhs.allocationSize) &&
+         (lhs.memoryTypeIndex == rhs.memoryTypeIndex);
+}
+
+bool operator!=(VkMemoryAllocateInfo const &lhs,
+                VkMemoryAllocateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryRequirements const &lhs,
+                VkMemoryRequirements const &rhs) noexcept {
+  return (lhs.size == rhs.size) &&
+         (lhs.alignment == rhs.alignment) &&
+         (lhs.memoryTypeBits == rhs.memoryTypeBits);
+}
+
+bool operator!=(VkMemoryRequirements const &lhs,
+                VkMemoryRequirements const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSparseImageFormatProperties const &lhs,
+                VkSparseImageFormatProperties const &rhs) noexcept {
+  return (lhs.aspectMask == rhs.aspectMask) &&
+         (lhs.imageGranularity == rhs.imageGranularity) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkSparseImageFormatProperties const &lhs,
+                VkSparseImageFormatProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSparseImageMemoryRequirements const &lhs,
+                VkSparseImageMemoryRequirements const &rhs) noexcept {
+  return (lhs.formatProperties == rhs.formatProperties) &&
+         (lhs.imageMipTailFirstLod == rhs.imageMipTailFirstLod) &&
+         (lhs.imageMipTailSize == rhs.imageMipTailSize) &&
+         (lhs.imageMipTailOffset == rhs.imageMipTailOffset) &&
+         (lhs.imageMipTailStride == rhs.imageMipTailStride);
+}
+
+bool operator!=(VkSparseImageMemoryRequirements const &lhs,
+                VkSparseImageMemoryRequirements const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryType const &lhs,
+                VkMemoryType const &rhs) noexcept {
+  return (lhs.propertyFlags == rhs.propertyFlags) &&
+         (lhs.heapIndex == rhs.heapIndex);
+}
+
+bool operator!=(VkMemoryType const &lhs,
+                VkMemoryType const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryHeap const &lhs,
+                VkMemoryHeap const &rhs) noexcept {
+  return (lhs.size == rhs.size) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkMemoryHeap const &lhs,
+                VkMemoryHeap const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMappedMemoryRange const &lhs,
+                VkMappedMemoryRange const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.size == rhs.size);
+}
+
+bool operator!=(VkMappedMemoryRange const &lhs,
+                VkMappedMemoryRange const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFormatProperties const &lhs,
+                VkFormatProperties const &rhs) noexcept {
+  return (lhs.linearTilingFeatures == rhs.linearTilingFeatures) &&
+         (lhs.optimalTilingFeatures == rhs.optimalTilingFeatures) &&
+         (lhs.bufferFeatures == rhs.bufferFeatures);
+}
+
+bool operator!=(VkFormatProperties const &lhs,
+                VkFormatProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageFormatProperties const &lhs,
+                VkImageFormatProperties const &rhs) noexcept {
+  return (lhs.maxExtent == rhs.maxExtent) &&
+         (lhs.maxMipLevels == rhs.maxMipLevels) &&
+         (lhs.maxArrayLayers == rhs.maxArrayLayers) &&
+         (lhs.sampleCounts == rhs.sampleCounts) &&
+         (lhs.maxResourceSize == rhs.maxResourceSize);
+}
+
+bool operator!=(VkImageFormatProperties const &lhs,
+                VkImageFormatProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorBufferInfo const &lhs,
+                VkDescriptorBufferInfo const &rhs) noexcept {
+  return (lhs.buffer == rhs.buffer) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.range == rhs.range);
+}
+
+bool operator!=(VkDescriptorBufferInfo const &lhs,
+                VkDescriptorBufferInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorImageInfo const &lhs,
+                VkDescriptorImageInfo const &rhs) noexcept {
+  return (lhs.sampler == rhs.sampler) &&
+         (lhs.imageView == rhs.imageView) &&
+         (lhs.imageLayout == rhs.imageLayout);
+}
+
+bool operator!=(VkDescriptorImageInfo const &lhs,
+                VkDescriptorImageInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkWriteDescriptorSet const &lhs,
+                VkWriteDescriptorSet const &rhs) noexcept {
+  if(lhs.descriptorCount != rhs.descriptorCount)
+    return false;
+
+  if(lhs.descriptorCount != rhs.descriptorCount)
+    return false;
+
+  if(lhs.descriptorCount != rhs.descriptorCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.descriptorCount; ++i) {
+    if(lhs.pImageInfo[i] != rhs.pImageInfo[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.descriptorCount; ++i) {
+    if(lhs.pBufferInfo[i] != rhs.pBufferInfo[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.descriptorCount; ++i) {
+    if(lhs.pTexelBufferView[i] != rhs.pTexelBufferView[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.dstSet == rhs.dstSet) &&
+         (lhs.dstBinding == rhs.dstBinding) &&
+         (lhs.dstArrayElement == rhs.dstArrayElement) &&
+         (lhs.descriptorType == rhs.descriptorType);
+}
+
+bool operator!=(VkWriteDescriptorSet const &lhs,
+                VkWriteDescriptorSet const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCopyDescriptorSet const &lhs,
+                VkCopyDescriptorSet const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcSet == rhs.srcSet) &&
+         (lhs.srcBinding == rhs.srcBinding) &&
+         (lhs.srcArrayElement == rhs.srcArrayElement) &&
+         (lhs.dstSet == rhs.dstSet) &&
+         (lhs.dstBinding == rhs.dstBinding) &&
+         (lhs.dstArrayElement == rhs.dstArrayElement) &&
+         (lhs.descriptorCount == rhs.descriptorCount);
+}
+
+bool operator!=(VkCopyDescriptorSet const &lhs,
+                VkCopyDescriptorSet const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferCreateInfo const &lhs,
+                VkBufferCreateInfo const &rhs) noexcept {
+  if(lhs.queueFamilyIndexCount != rhs.queueFamilyIndexCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.queueFamilyIndexCount; ++i) {
+    if(lhs.pQueueFamilyIndices[i] != rhs.pQueueFamilyIndices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.size == rhs.size) &&
+         (lhs.usage == rhs.usage) &&
+         (lhs.sharingMode == rhs.sharingMode);
+}
+
+bool operator!=(VkBufferCreateInfo const &lhs,
+                VkBufferCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferViewCreateInfo const &lhs,
+                VkBufferViewCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.buffer == rhs.buffer) &&
+         (lhs.format == rhs.format) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.range == rhs.range);
+}
+
+bool operator!=(VkBufferViewCreateInfo const &lhs,
+                VkBufferViewCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageSubresource const &lhs,
+                VkImageSubresource const &rhs) noexcept {
+  return (lhs.aspectMask == rhs.aspectMask) &&
+         (lhs.mipLevel == rhs.mipLevel) &&
+         (lhs.arrayLayer == rhs.arrayLayer);
+}
+
+bool operator!=(VkImageSubresource const &lhs,
+                VkImageSubresource const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageSubresourceLayers const &lhs,
+                VkImageSubresourceLayers const &rhs) noexcept {
+  return (lhs.aspectMask == rhs.aspectMask) &&
+         (lhs.mipLevel == rhs.mipLevel) &&
+         (lhs.baseArrayLayer == rhs.baseArrayLayer) &&
+         (lhs.layerCount == rhs.layerCount);
+}
+
+bool operator!=(VkImageSubresourceLayers const &lhs,
+                VkImageSubresourceLayers const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageSubresourceRange const &lhs,
+                VkImageSubresourceRange const &rhs) noexcept {
+  return (lhs.aspectMask == rhs.aspectMask) &&
+         (lhs.baseMipLevel == rhs.baseMipLevel) &&
+         (lhs.levelCount == rhs.levelCount) &&
+         (lhs.baseArrayLayer == rhs.baseArrayLayer) &&
+         (lhs.layerCount == rhs.layerCount);
+}
+
+bool operator!=(VkImageSubresourceRange const &lhs,
+                VkImageSubresourceRange const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryBarrier const &lhs,
+                VkMemoryBarrier const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcAccessMask == rhs.srcAccessMask) &&
+         (lhs.dstAccessMask == rhs.dstAccessMask);
+}
+
+bool operator!=(VkMemoryBarrier const &lhs,
+                VkMemoryBarrier const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferMemoryBarrier const &lhs,
+                VkBufferMemoryBarrier const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcAccessMask == rhs.srcAccessMask) &&
+         (lhs.dstAccessMask == rhs.dstAccessMask) &&
+         (lhs.srcQueueFamilyIndex == rhs.srcQueueFamilyIndex) &&
+         (lhs.dstQueueFamilyIndex == rhs.dstQueueFamilyIndex) &&
+         (lhs.buffer == rhs.buffer) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.size == rhs.size);
+}
+
+bool operator!=(VkBufferMemoryBarrier const &lhs,
+                VkBufferMemoryBarrier const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageMemoryBarrier const &lhs,
+                VkImageMemoryBarrier const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcAccessMask == rhs.srcAccessMask) &&
+         (lhs.dstAccessMask == rhs.dstAccessMask) &&
+         (lhs.oldLayout == rhs.oldLayout) &&
+         (lhs.newLayout == rhs.newLayout) &&
+         (lhs.srcQueueFamilyIndex == rhs.srcQueueFamilyIndex) &&
+         (lhs.dstQueueFamilyIndex == rhs.dstQueueFamilyIndex) &&
+         (lhs.image == rhs.image) &&
+         (lhs.subresourceRange == rhs.subresourceRange);
+}
+
+bool operator!=(VkImageMemoryBarrier const &lhs,
+                VkImageMemoryBarrier const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageCreateInfo const &lhs,
+                VkImageCreateInfo const &rhs) noexcept {
+  if(lhs.queueFamilyIndexCount != rhs.queueFamilyIndexCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.queueFamilyIndexCount; ++i) {
+    if(lhs.pQueueFamilyIndices[i] != rhs.pQueueFamilyIndices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.imageType == rhs.imageType) &&
+         (lhs.format == rhs.format) &&
+         (lhs.extent == rhs.extent) &&
+         (lhs.mipLevels == rhs.mipLevels) &&
+         (lhs.arrayLayers == rhs.arrayLayers) &&
+         (lhs.samples == rhs.samples) &&
+         (lhs.tiling == rhs.tiling) &&
+         (lhs.usage == rhs.usage) &&
+         (lhs.sharingMode == rhs.sharingMode) &&
+         (lhs.initialLayout == rhs.initialLayout);
+}
+
+bool operator!=(VkImageCreateInfo const &lhs,
+                VkImageCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubresourceLayout const &lhs,
+                VkSubresourceLayout const &rhs) noexcept {
+  return (lhs.offset == rhs.offset) &&
+         (lhs.size == rhs.size) &&
+         (lhs.rowPitch == rhs.rowPitch) &&
+         (lhs.arrayPitch == rhs.arrayPitch) &&
+         (lhs.depthPitch == rhs.depthPitch);
+}
+
+bool operator!=(VkSubresourceLayout const &lhs,
+                VkSubresourceLayout const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageViewCreateInfo const &lhs,
+                VkImageViewCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.image == rhs.image) &&
+         (lhs.viewType == rhs.viewType) &&
+         (lhs.format == rhs.format) &&
+         (lhs.components == rhs.components) &&
+         (lhs.subresourceRange == rhs.subresourceRange);
+}
+
+bool operator!=(VkImageViewCreateInfo const &lhs,
+                VkImageViewCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferCopy const &lhs,
+                VkBufferCopy const &rhs) noexcept {
+  return (lhs.srcOffset == rhs.srcOffset) &&
+         (lhs.dstOffset == rhs.dstOffset) &&
+         (lhs.size == rhs.size);
+}
+
+bool operator!=(VkBufferCopy const &lhs,
+                VkBufferCopy const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSparseMemoryBind const &lhs,
+                VkSparseMemoryBind const &rhs) noexcept {
+  return (lhs.resourceOffset == rhs.resourceOffset) &&
+         (lhs.size == rhs.size) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.memoryOffset == rhs.memoryOffset) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkSparseMemoryBind const &lhs,
+                VkSparseMemoryBind const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSparseImageMemoryBind const &lhs,
+                VkSparseImageMemoryBind const &rhs) noexcept {
+  return (lhs.subresource == rhs.subresource) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.extent == rhs.extent) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.memoryOffset == rhs.memoryOffset) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkSparseImageMemoryBind const &lhs,
+                VkSparseImageMemoryBind const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSparseBufferMemoryBindInfo const &lhs,
+                VkSparseBufferMemoryBindInfo const &rhs) noexcept {
+  if(lhs.bindCount != rhs.bindCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.bindCount; ++i) {
+    if(lhs.pBinds[i] != rhs.pBinds[i])
+      return false;
+  }
+
+  return (lhs.buffer == rhs.buffer);
+}
+
+bool operator!=(VkSparseBufferMemoryBindInfo const &lhs,
+                VkSparseBufferMemoryBindInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSparseImageOpaqueMemoryBindInfo const &lhs,
+                VkSparseImageOpaqueMemoryBindInfo const &rhs) noexcept {
+  if(lhs.bindCount != rhs.bindCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.bindCount; ++i) {
+    if(lhs.pBinds[i] != rhs.pBinds[i])
+      return false;
+  }
+
+  return (lhs.image == rhs.image);
+}
+
+bool operator!=(VkSparseImageOpaqueMemoryBindInfo const &lhs,
+                VkSparseImageOpaqueMemoryBindInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSparseImageMemoryBindInfo const &lhs,
+                VkSparseImageMemoryBindInfo const &rhs) noexcept {
+  if(lhs.bindCount != rhs.bindCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.bindCount; ++i) {
+    if(lhs.pBinds[i] != rhs.pBinds[i])
+      return false;
+  }
+
+  return (lhs.image == rhs.image);
+}
+
+bool operator!=(VkSparseImageMemoryBindInfo const &lhs,
+                VkSparseImageMemoryBindInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindSparseInfo const &lhs,
+                VkBindSparseInfo const &rhs) noexcept {
+  if(lhs.waitSemaphoreCount != rhs.waitSemaphoreCount)
+    return false;
+
+  if(lhs.bufferBindCount != rhs.bufferBindCount)
+    return false;
+
+  if(lhs.imageOpaqueBindCount != rhs.imageOpaqueBindCount)
+    return false;
+
+  if(lhs.imageBindCount != rhs.imageBindCount)
+    return false;
+
+  if(lhs.signalSemaphoreCount != rhs.signalSemaphoreCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.waitSemaphoreCount; ++i) {
+    if(lhs.pWaitSemaphores[i] != rhs.pWaitSemaphores[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.bufferBindCount; ++i) {
+    if(lhs.pBufferBinds[i] != rhs.pBufferBinds[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.imageOpaqueBindCount; ++i) {
+    if(lhs.pImageOpaqueBinds[i] != rhs.pImageOpaqueBinds[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.imageBindCount; ++i) {
+    if(lhs.pImageBinds[i] != rhs.pImageBinds[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.signalSemaphoreCount; ++i) {
+    if(lhs.pSignalSemaphores[i] != rhs.pSignalSemaphores[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkBindSparseInfo const &lhs,
+                VkBindSparseInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageCopy const &lhs,
+                VkImageCopy const &rhs) noexcept {
+  return (lhs.srcSubresource == rhs.srcSubresource) &&
+         (lhs.srcOffset == rhs.srcOffset) &&
+         (lhs.dstSubresource == rhs.dstSubresource) &&
+         (lhs.dstOffset == rhs.dstOffset) &&
+         (lhs.extent == rhs.extent);
+}
+
+bool operator!=(VkImageCopy const &lhs,
+                VkImageCopy const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageBlit const &lhs,
+                VkImageBlit const &rhs) noexcept {
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.srcOffsets[i] != rhs.srcOffsets[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.dstOffsets[i] != rhs.dstOffsets[i])
+      return false;
+  }
+
+  return (lhs.srcSubresource == rhs.srcSubresource) &&
+         (lhs.dstSubresource == rhs.dstSubresource);
+}
+
+bool operator!=(VkImageBlit const &lhs,
+                VkImageBlit const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferImageCopy const &lhs,
+                VkBufferImageCopy const &rhs) noexcept {
+  return (lhs.bufferOffset == rhs.bufferOffset) &&
+         (lhs.bufferRowLength == rhs.bufferRowLength) &&
+         (lhs.bufferImageHeight == rhs.bufferImageHeight) &&
+         (lhs.imageSubresource == rhs.imageSubresource) &&
+         (lhs.imageOffset == rhs.imageOffset) &&
+         (lhs.imageExtent == rhs.imageExtent);
+}
+
+bool operator!=(VkBufferImageCopy const &lhs,
+                VkBufferImageCopy const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageResolve const &lhs,
+                VkImageResolve const &rhs) noexcept {
+  return (lhs.srcSubresource == rhs.srcSubresource) &&
+         (lhs.srcOffset == rhs.srcOffset) &&
+         (lhs.dstSubresource == rhs.dstSubresource) &&
+         (lhs.dstOffset == rhs.dstOffset) &&
+         (lhs.extent == rhs.extent);
+}
+
+bool operator!=(VkImageResolve const &lhs,
+                VkImageResolve const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkShaderModuleCreateInfo const &lhs,
+                VkShaderModuleCreateInfo const &rhs) noexcept {
+  if(lhs.codeSize != rhs.codeSize)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.codeSize / 4; ++i) {
+    if(lhs.pCode[i] != rhs.pCode[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkShaderModuleCreateInfo const &lhs,
+                VkShaderModuleCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorSetLayoutBinding const &lhs,
+                VkDescriptorSetLayoutBinding const &rhs) noexcept {
+  if(lhs.descriptorCount != rhs.descriptorCount)
+    return false;
+
+  if (lhs.pImmutableSamplers != rhs.pImmutableSamplers) {
+    if(lhs.pImmutableSamplers == nullptr || rhs.pImmutableSamplers == nullptr)
+      return false;
+    for(uint32_t i = 0; i < lhs.descriptorCount; ++i) {
+        if(lhs.pImmutableSamplers[i] != rhs.pImmutableSamplers[i])
+        return false;
+    }
+  }
+
+  return (lhs.binding == rhs.binding) &&
+         (lhs.descriptorType == rhs.descriptorType) &&
+         (lhs.stageFlags == rhs.stageFlags);
+}
+
+bool operator!=(VkDescriptorSetLayoutBinding const &lhs,
+                VkDescriptorSetLayoutBinding const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorSetLayoutCreateInfo const &lhs,
+                VkDescriptorSetLayoutCreateInfo const &rhs) noexcept {
+  if(lhs.bindingCount != rhs.bindingCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.bindingCount; ++i) {
+    if(lhs.pBindings[i] != rhs.pBindings[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkDescriptorSetLayoutCreateInfo const &lhs,
+                VkDescriptorSetLayoutCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorPoolSize const &lhs,
+                VkDescriptorPoolSize const &rhs) noexcept {
+  return (lhs.type == rhs.type) &&
+         (lhs.descriptorCount == rhs.descriptorCount);
+}
+
+bool operator!=(VkDescriptorPoolSize const &lhs,
+                VkDescriptorPoolSize const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorPoolCreateInfo const &lhs,
+                VkDescriptorPoolCreateInfo const &rhs) noexcept {
+  if(lhs.poolSizeCount != rhs.poolSizeCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.poolSizeCount; ++i) {
+    if(lhs.pPoolSizes[i] != rhs.pPoolSizes[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.maxSets == rhs.maxSets);
+}
+
+bool operator!=(VkDescriptorPoolCreateInfo const &lhs,
+                VkDescriptorPoolCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorSetAllocateInfo const &lhs,
+                VkDescriptorSetAllocateInfo const &rhs) noexcept {
+  if(lhs.descriptorSetCount != rhs.descriptorSetCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.descriptorSetCount; ++i) {
+    if(lhs.pSetLayouts[i] != rhs.pSetLayouts[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.descriptorPool == rhs.descriptorPool);
+}
+
+bool operator!=(VkDescriptorSetAllocateInfo const &lhs,
+                VkDescriptorSetAllocateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSpecializationMapEntry const &lhs,
+                VkSpecializationMapEntry const &rhs) noexcept {
+  return (lhs.constantID == rhs.constantID) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.size == rhs.size);
+}
+
+bool operator!=(VkSpecializationMapEntry const &lhs,
+                VkSpecializationMapEntry const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSpecializationInfo const &lhs,
+                VkSpecializationInfo const &rhs) noexcept {
+  if(lhs.mapEntryCount != rhs.mapEntryCount)
+    return false;
+
+  if(lhs.dataSize != rhs.dataSize)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.mapEntryCount; ++i) {
+    if(lhs.pMapEntries[i] != rhs.pMapEntries[i])
+      return false;
+  }
+
+  if(memcmp(lhs.pData, rhs.pData, lhs.dataSize) != 0)
+    return false;
+
+  return true;
+}
+
+bool operator!=(VkSpecializationInfo const &lhs,
+                VkSpecializationInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineShaderStageCreateInfo const &lhs,
+                VkPipelineShaderStageCreateInfo const &rhs) noexcept {
+  if (lhs.pName != rhs.pName) {
+    if(lhs.pName == nullptr || rhs.pName == nullptr)
+      return false;
+    if(strcmp(lhs.pName, rhs.pName) != 0)
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.stage == rhs.stage) &&
+         (lhs.module == rhs.module) &&
+         (lhs.pSpecializationInfo == rhs.pSpecializationInfo);
+}
+
+bool operator!=(VkPipelineShaderStageCreateInfo const &lhs,
+                VkPipelineShaderStageCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkComputePipelineCreateInfo const &lhs,
+                VkComputePipelineCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.stage == rhs.stage) &&
+         (lhs.layout == rhs.layout) &&
+         (lhs.basePipelineHandle == rhs.basePipelineHandle) &&
+         (lhs.basePipelineIndex == rhs.basePipelineIndex);
+}
+
+bool operator!=(VkComputePipelineCreateInfo const &lhs,
+                VkComputePipelineCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkVertexInputBindingDescription const &lhs,
+                VkVertexInputBindingDescription const &rhs) noexcept {
+  return (lhs.binding == rhs.binding) &&
+         (lhs.stride == rhs.stride) &&
+         (lhs.inputRate == rhs.inputRate);
+}
+
+bool operator!=(VkVertexInputBindingDescription const &lhs,
+                VkVertexInputBindingDescription const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkVertexInputAttributeDescription const &lhs,
+                VkVertexInputAttributeDescription const &rhs) noexcept {
+  return (lhs.location == rhs.location) &&
+         (lhs.binding == rhs.binding) &&
+         (lhs.format == rhs.format) &&
+         (lhs.offset == rhs.offset);
+}
+
+bool operator!=(VkVertexInputAttributeDescription const &lhs,
+                VkVertexInputAttributeDescription const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineVertexInputStateCreateInfo const &lhs,
+                VkPipelineVertexInputStateCreateInfo const &rhs) noexcept {
+  if(lhs.vertexBindingDescriptionCount != rhs.vertexBindingDescriptionCount)
+    return false;
+
+  if(lhs.vertexAttributeDescriptionCount != rhs.vertexAttributeDescriptionCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.vertexBindingDescriptionCount; ++i) {
+    if(lhs.pVertexBindingDescriptions[i] != rhs.pVertexBindingDescriptions[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.vertexAttributeDescriptionCount; ++i) {
+    if(lhs.pVertexAttributeDescriptions[i] != rhs.pVertexAttributeDescriptions[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkPipelineVertexInputStateCreateInfo const &lhs,
+                VkPipelineVertexInputStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineInputAssemblyStateCreateInfo const &lhs,
+                VkPipelineInputAssemblyStateCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.topology == rhs.topology) &&
+         (lhs.primitiveRestartEnable == rhs.primitiveRestartEnable);
+}
+
+bool operator!=(VkPipelineInputAssemblyStateCreateInfo const &lhs,
+                VkPipelineInputAssemblyStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineTessellationStateCreateInfo const &lhs,
+                VkPipelineTessellationStateCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.patchControlPoints == rhs.patchControlPoints);
+}
+
+bool operator!=(VkPipelineTessellationStateCreateInfo const &lhs,
+                VkPipelineTessellationStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineViewportStateCreateInfo const &lhs,
+                VkPipelineViewportStateCreateInfo const &rhs) noexcept {
+  if(lhs.viewportCount != rhs.viewportCount)
+    return false;
+
+  if(lhs.scissorCount != rhs.scissorCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.viewportCount; ++i) {
+    if(lhs.pViewports[i] != rhs.pViewports[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.scissorCount; ++i) {
+    if(lhs.pScissors[i] != rhs.pScissors[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkPipelineViewportStateCreateInfo const &lhs,
+                VkPipelineViewportStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineRasterizationStateCreateInfo const &lhs,
+                VkPipelineRasterizationStateCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.depthClampEnable == rhs.depthClampEnable) &&
+         (lhs.rasterizerDiscardEnable == rhs.rasterizerDiscardEnable) &&
+         (lhs.polygonMode == rhs.polygonMode) &&
+         (lhs.cullMode == rhs.cullMode) &&
+         (lhs.frontFace == rhs.frontFace) &&
+         (lhs.depthBiasEnable == rhs.depthBiasEnable) &&
+         (lhs.depthBiasConstantFactor == rhs.depthBiasConstantFactor) &&
+         (lhs.depthBiasClamp == rhs.depthBiasClamp) &&
+         (lhs.depthBiasSlopeFactor == rhs.depthBiasSlopeFactor) &&
+         (lhs.lineWidth == rhs.lineWidth);
+}
+
+bool operator!=(VkPipelineRasterizationStateCreateInfo const &lhs,
+                VkPipelineRasterizationStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineMultisampleStateCreateInfo const &lhs,
+                VkPipelineMultisampleStateCreateInfo const &rhs) noexcept {
+  if(lhs.rasterizationSamples != rhs.rasterizationSamples)
+    return false;
+
+  for(uint32_t i = 0; i < (lhs.rasterizationSamples + 31) / 32; ++i) {
+    if(lhs.pSampleMask[i] != rhs.pSampleMask[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.sampleShadingEnable == rhs.sampleShadingEnable) &&
+         (lhs.minSampleShading == rhs.minSampleShading) &&
+         (lhs.alphaToCoverageEnable == rhs.alphaToCoverageEnable) &&
+         (lhs.alphaToOneEnable == rhs.alphaToOneEnable);
+}
+
+bool operator!=(VkPipelineMultisampleStateCreateInfo const &lhs,
+                VkPipelineMultisampleStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineColorBlendAttachmentState const &lhs,
+                VkPipelineColorBlendAttachmentState const &rhs) noexcept {
+  return (lhs.blendEnable == rhs.blendEnable) &&
+         (lhs.srcColorBlendFactor == rhs.srcColorBlendFactor) &&
+         (lhs.dstColorBlendFactor == rhs.dstColorBlendFactor) &&
+         (lhs.colorBlendOp == rhs.colorBlendOp) &&
+         (lhs.srcAlphaBlendFactor == rhs.srcAlphaBlendFactor) &&
+         (lhs.dstAlphaBlendFactor == rhs.dstAlphaBlendFactor) &&
+         (lhs.alphaBlendOp == rhs.alphaBlendOp) &&
+         (lhs.colorWriteMask == rhs.colorWriteMask);
+}
+
+bool operator!=(VkPipelineColorBlendAttachmentState const &lhs,
+                VkPipelineColorBlendAttachmentState const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineColorBlendStateCreateInfo const &lhs,
+                VkPipelineColorBlendStateCreateInfo const &rhs) noexcept {
+  if(lhs.attachmentCount != rhs.attachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.attachmentCount; ++i) {
+    if(lhs.pAttachments[i] != rhs.pAttachments[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 4; ++i) {
+    if(lhs.blendConstants[i] != rhs.blendConstants[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.logicOpEnable == rhs.logicOpEnable) &&
+         (lhs.logicOp == rhs.logicOp);
+}
+
+bool operator!=(VkPipelineColorBlendStateCreateInfo const &lhs,
+                VkPipelineColorBlendStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineDynamicStateCreateInfo const &lhs,
+                VkPipelineDynamicStateCreateInfo const &rhs) noexcept {
+  if(lhs.dynamicStateCount != rhs.dynamicStateCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.dynamicStateCount; ++i) {
+    if(lhs.pDynamicStates[i] != rhs.pDynamicStates[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkPipelineDynamicStateCreateInfo const &lhs,
+                VkPipelineDynamicStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkStencilOpState const &lhs,
+                VkStencilOpState const &rhs) noexcept {
+  return (lhs.failOp == rhs.failOp) &&
+         (lhs.passOp == rhs.passOp) &&
+         (lhs.depthFailOp == rhs.depthFailOp) &&
+         (lhs.compareOp == rhs.compareOp) &&
+         (lhs.compareMask == rhs.compareMask) &&
+         (lhs.writeMask == rhs.writeMask) &&
+         (lhs.reference == rhs.reference);
+}
+
+bool operator!=(VkStencilOpState const &lhs,
+                VkStencilOpState const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineDepthStencilStateCreateInfo const &lhs,
+                VkPipelineDepthStencilStateCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.depthTestEnable == rhs.depthTestEnable) &&
+         (lhs.depthWriteEnable == rhs.depthWriteEnable) &&
+         (lhs.depthCompareOp == rhs.depthCompareOp) &&
+         (lhs.depthBoundsTestEnable == rhs.depthBoundsTestEnable) &&
+         (lhs.stencilTestEnable == rhs.stencilTestEnable) &&
+         (lhs.front == rhs.front) &&
+         (lhs.back == rhs.back) &&
+         (lhs.minDepthBounds == rhs.minDepthBounds) &&
+         (lhs.maxDepthBounds == rhs.maxDepthBounds);
+}
+
+bool operator!=(VkPipelineDepthStencilStateCreateInfo const &lhs,
+                VkPipelineDepthStencilStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkGraphicsPipelineCreateInfo const &lhs,
+                VkGraphicsPipelineCreateInfo const &rhs) noexcept {
+  if(lhs.stageCount != rhs.stageCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.stageCount; ++i) {
+    if(lhs.pStages[i] != rhs.pStages[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pVertexInputState == rhs.pVertexInputState) &&
+         (lhs.pInputAssemblyState == rhs.pInputAssemblyState) &&
+         (lhs.pTessellationState == rhs.pTessellationState) &&
+         (lhs.pViewportState == rhs.pViewportState) &&
+         (lhs.pRasterizationState == rhs.pRasterizationState) &&
+         (lhs.pMultisampleState == rhs.pMultisampleState) &&
+         (lhs.pDepthStencilState == rhs.pDepthStencilState) &&
+         (lhs.pColorBlendState == rhs.pColorBlendState) &&
+         (lhs.pDynamicState == rhs.pDynamicState) &&
+         (lhs.layout == rhs.layout) &&
+         (lhs.renderPass == rhs.renderPass) &&
+         (lhs.subpass == rhs.subpass) &&
+         (lhs.basePipelineHandle == rhs.basePipelineHandle) &&
+         (lhs.basePipelineIndex == rhs.basePipelineIndex);
+}
+
+bool operator!=(VkGraphicsPipelineCreateInfo const &lhs,
+                VkGraphicsPipelineCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineCacheCreateInfo const &lhs,
+                VkPipelineCacheCreateInfo const &rhs) noexcept {
+  if(lhs.initialDataSize != rhs.initialDataSize)
+    return false;
+
+  if(memcmp(lhs.pInitialData, rhs.pInitialData, lhs.initialDataSize) != 0)
+    return false;
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkPipelineCacheCreateInfo const &lhs,
+                VkPipelineCacheCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineCacheHeaderVersionOne const &lhs,
+                VkPipelineCacheHeaderVersionOne const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_UUID_SIZE; ++i) {
+    if(lhs.pipelineCacheUUID[i] != rhs.pipelineCacheUUID[i])
+      return false;
+  }
+
+  return (lhs.headerSize == rhs.headerSize) &&
+         (lhs.headerVersion == rhs.headerVersion) &&
+         (lhs.vendorID == rhs.vendorID) &&
+         (lhs.deviceID == rhs.deviceID);
+}
+
+bool operator!=(VkPipelineCacheHeaderVersionOne const &lhs,
+                VkPipelineCacheHeaderVersionOne const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPushConstantRange const &lhs,
+                VkPushConstantRange const &rhs) noexcept {
+  return (lhs.stageFlags == rhs.stageFlags) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.size == rhs.size);
+}
+
+bool operator!=(VkPushConstantRange const &lhs,
+                VkPushConstantRange const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineLayoutCreateInfo const &lhs,
+                VkPipelineLayoutCreateInfo const &rhs) noexcept {
+  if(lhs.setLayoutCount != rhs.setLayoutCount)
+    return false;
+
+  if(lhs.pushConstantRangeCount != rhs.pushConstantRangeCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.setLayoutCount; ++i) {
+    if(lhs.pSetLayouts[i] != rhs.pSetLayouts[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.pushConstantRangeCount; ++i) {
+    if(lhs.pPushConstantRanges[i] != rhs.pPushConstantRanges[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkPipelineLayoutCreateInfo const &lhs,
+                VkPipelineLayoutCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSamplerCreateInfo const &lhs,
+                VkSamplerCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.magFilter == rhs.magFilter) &&
+         (lhs.minFilter == rhs.minFilter) &&
+         (lhs.mipmapMode == rhs.mipmapMode) &&
+         (lhs.addressModeU == rhs.addressModeU) &&
+         (lhs.addressModeV == rhs.addressModeV) &&
+         (lhs.addressModeW == rhs.addressModeW) &&
+         (lhs.mipLodBias == rhs.mipLodBias) &&
+         (lhs.anisotropyEnable == rhs.anisotropyEnable) &&
+         (lhs.maxAnisotropy == rhs.maxAnisotropy) &&
+         (lhs.compareEnable == rhs.compareEnable) &&
+         (lhs.compareOp == rhs.compareOp) &&
+         (lhs.minLod == rhs.minLod) &&
+         (lhs.maxLod == rhs.maxLod) &&
+         (lhs.borderColor == rhs.borderColor) &&
+         (lhs.unnormalizedCoordinates == rhs.unnormalizedCoordinates);
+}
+
+bool operator!=(VkSamplerCreateInfo const &lhs,
+                VkSamplerCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCommandPoolCreateInfo const &lhs,
+                VkCommandPoolCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.queueFamilyIndex == rhs.queueFamilyIndex);
+}
+
+bool operator!=(VkCommandPoolCreateInfo const &lhs,
+                VkCommandPoolCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCommandBufferAllocateInfo const &lhs,
+                VkCommandBufferAllocateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.commandPool == rhs.commandPool) &&
+         (lhs.level == rhs.level) &&
+         (lhs.commandBufferCount == rhs.commandBufferCount);
+}
+
+bool operator!=(VkCommandBufferAllocateInfo const &lhs,
+                VkCommandBufferAllocateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCommandBufferInheritanceInfo const &lhs,
+                VkCommandBufferInheritanceInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.renderPass == rhs.renderPass) &&
+         (lhs.subpass == rhs.subpass) &&
+         (lhs.framebuffer == rhs.framebuffer) &&
+         (lhs.occlusionQueryEnable == rhs.occlusionQueryEnable) &&
+         (lhs.queryFlags == rhs.queryFlags) &&
+         (lhs.pipelineStatistics == rhs.pipelineStatistics);
+}
+
+bool operator!=(VkCommandBufferInheritanceInfo const &lhs,
+                VkCommandBufferInheritanceInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCommandBufferBeginInfo const &lhs,
+                VkCommandBufferBeginInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pInheritanceInfo == rhs.pInheritanceInfo);
+}
+
+bool operator!=(VkCommandBufferBeginInfo const &lhs,
+                VkCommandBufferBeginInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkClearDepthStencilValue const &lhs,
+                VkClearDepthStencilValue const &rhs) noexcept {
+  return (lhs.depth == rhs.depth) &&
+         (lhs.stencil == rhs.stencil);
+}
+
+bool operator!=(VkClearDepthStencilValue const &lhs,
+                VkClearDepthStencilValue const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAttachmentDescription const &lhs,
+                VkAttachmentDescription const &rhs) noexcept {
+  return (lhs.flags == rhs.flags) &&
+         (lhs.format == rhs.format) &&
+         (lhs.samples == rhs.samples) &&
+         (lhs.loadOp == rhs.loadOp) &&
+         (lhs.storeOp == rhs.storeOp) &&
+         (lhs.stencilLoadOp == rhs.stencilLoadOp) &&
+         (lhs.stencilStoreOp == rhs.stencilStoreOp) &&
+         (lhs.initialLayout == rhs.initialLayout) &&
+         (lhs.finalLayout == rhs.finalLayout);
+}
+
+bool operator!=(VkAttachmentDescription const &lhs,
+                VkAttachmentDescription const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAttachmentReference const &lhs,
+                VkAttachmentReference const &rhs) noexcept {
+  return (lhs.attachment == rhs.attachment) &&
+         (lhs.layout == rhs.layout);
+}
+
+bool operator!=(VkAttachmentReference const &lhs,
+                VkAttachmentReference const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubpassDescription const &lhs,
+                VkSubpassDescription const &rhs) noexcept {
+  if(lhs.inputAttachmentCount != rhs.inputAttachmentCount)
+    return false;
+
+  if(lhs.colorAttachmentCount != rhs.colorAttachmentCount)
+    return false;
+
+  if(lhs.colorAttachmentCount != rhs.colorAttachmentCount)
+    return false;
+
+  if(lhs.preserveAttachmentCount != rhs.preserveAttachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.inputAttachmentCount; ++i) {
+    if(lhs.pInputAttachments[i] != rhs.pInputAttachments[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.colorAttachmentCount; ++i) {
+    if(lhs.pColorAttachments[i] != rhs.pColorAttachments[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.colorAttachmentCount; ++i) {
+    if(lhs.pResolveAttachments[i] != rhs.pResolveAttachments[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.preserveAttachmentCount; ++i) {
+    if(lhs.pPreserveAttachments[i] != rhs.pPreserveAttachments[i])
+      return false;
+  }
+
+  return (lhs.flags == rhs.flags) &&
+         (lhs.pipelineBindPoint == rhs.pipelineBindPoint) &&
+         (lhs.pDepthStencilAttachment == rhs.pDepthStencilAttachment);
+}
+
+bool operator!=(VkSubpassDescription const &lhs,
+                VkSubpassDescription const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubpassDependency const &lhs,
+                VkSubpassDependency const &rhs) noexcept {
+  return (lhs.srcSubpass == rhs.srcSubpass) &&
+         (lhs.dstSubpass == rhs.dstSubpass) &&
+         (lhs.srcStageMask == rhs.srcStageMask) &&
+         (lhs.dstStageMask == rhs.dstStageMask) &&
+         (lhs.srcAccessMask == rhs.srcAccessMask) &&
+         (lhs.dstAccessMask == rhs.dstAccessMask) &&
+         (lhs.dependencyFlags == rhs.dependencyFlags);
+}
+
+bool operator!=(VkSubpassDependency const &lhs,
+                VkSubpassDependency const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderPassCreateInfo const &lhs,
+                VkRenderPassCreateInfo const &rhs) noexcept {
+  if(lhs.attachmentCount != rhs.attachmentCount)
+    return false;
+
+  if(lhs.subpassCount != rhs.subpassCount)
+    return false;
+
+  if(lhs.dependencyCount != rhs.dependencyCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.attachmentCount; ++i) {
+    if(lhs.pAttachments[i] != rhs.pAttachments[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.subpassCount; ++i) {
+    if(lhs.pSubpasses[i] != rhs.pSubpasses[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.dependencyCount; ++i) {
+    if(lhs.pDependencies[i] != rhs.pDependencies[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkRenderPassCreateInfo const &lhs,
+                VkRenderPassCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkEventCreateInfo const &lhs,
+                VkEventCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkEventCreateInfo const &lhs,
+                VkEventCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFenceCreateInfo const &lhs,
+                VkFenceCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkFenceCreateInfo const &lhs,
+                VkFenceCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFeatures const &lhs,
+                VkPhysicalDeviceFeatures const &rhs) noexcept {
+  return (lhs.robustBufferAccess == rhs.robustBufferAccess) &&
+         (lhs.fullDrawIndexUint32 == rhs.fullDrawIndexUint32) &&
+         (lhs.imageCubeArray == rhs.imageCubeArray) &&
+         (lhs.independentBlend == rhs.independentBlend) &&
+         (lhs.geometryShader == rhs.geometryShader) &&
+         (lhs.tessellationShader == rhs.tessellationShader) &&
+         (lhs.sampleRateShading == rhs.sampleRateShading) &&
+         (lhs.dualSrcBlend == rhs.dualSrcBlend) &&
+         (lhs.logicOp == rhs.logicOp) &&
+         (lhs.multiDrawIndirect == rhs.multiDrawIndirect) &&
+         (lhs.drawIndirectFirstInstance == rhs.drawIndirectFirstInstance) &&
+         (lhs.depthClamp == rhs.depthClamp) &&
+         (lhs.depthBiasClamp == rhs.depthBiasClamp) &&
+         (lhs.fillModeNonSolid == rhs.fillModeNonSolid) &&
+         (lhs.depthBounds == rhs.depthBounds) &&
+         (lhs.wideLines == rhs.wideLines) &&
+         (lhs.largePoints == rhs.largePoints) &&
+         (lhs.alphaToOne == rhs.alphaToOne) &&
+         (lhs.multiViewport == rhs.multiViewport) &&
+         (lhs.samplerAnisotropy == rhs.samplerAnisotropy) &&
+         (lhs.textureCompressionETC2 == rhs.textureCompressionETC2) &&
+         (lhs.textureCompressionASTC_LDR == rhs.textureCompressionASTC_LDR) &&
+         (lhs.textureCompressionBC == rhs.textureCompressionBC) &&
+         (lhs.occlusionQueryPrecise == rhs.occlusionQueryPrecise) &&
+         (lhs.pipelineStatisticsQuery == rhs.pipelineStatisticsQuery) &&
+         (lhs.vertexPipelineStoresAndAtomics == rhs.vertexPipelineStoresAndAtomics) &&
+         (lhs.fragmentStoresAndAtomics == rhs.fragmentStoresAndAtomics) &&
+         (lhs.shaderTessellationAndGeometryPointSize == rhs.shaderTessellationAndGeometryPointSize) &&
+         (lhs.shaderImageGatherExtended == rhs.shaderImageGatherExtended) &&
+         (lhs.shaderStorageImageExtendedFormats == rhs.shaderStorageImageExtendedFormats) &&
+         (lhs.shaderStorageImageMultisample == rhs.shaderStorageImageMultisample) &&
+         (lhs.shaderStorageImageReadWithoutFormat == rhs.shaderStorageImageReadWithoutFormat) &&
+         (lhs.shaderStorageImageWriteWithoutFormat == rhs.shaderStorageImageWriteWithoutFormat) &&
+         (lhs.shaderUniformBufferArrayDynamicIndexing == rhs.shaderUniformBufferArrayDynamicIndexing) &&
+         (lhs.shaderSampledImageArrayDynamicIndexing == rhs.shaderSampledImageArrayDynamicIndexing) &&
+         (lhs.shaderStorageBufferArrayDynamicIndexing == rhs.shaderStorageBufferArrayDynamicIndexing) &&
+         (lhs.shaderStorageImageArrayDynamicIndexing == rhs.shaderStorageImageArrayDynamicIndexing) &&
+         (lhs.shaderClipDistance == rhs.shaderClipDistance) &&
+         (lhs.shaderCullDistance == rhs.shaderCullDistance) &&
+         (lhs.shaderFloat64 == rhs.shaderFloat64) &&
+         (lhs.shaderInt64 == rhs.shaderInt64) &&
+         (lhs.shaderInt16 == rhs.shaderInt16) &&
+         (lhs.shaderResourceResidency == rhs.shaderResourceResidency) &&
+         (lhs.shaderResourceMinLod == rhs.shaderResourceMinLod) &&
+         (lhs.sparseBinding == rhs.sparseBinding) &&
+         (lhs.sparseResidencyBuffer == rhs.sparseResidencyBuffer) &&
+         (lhs.sparseResidencyImage2D == rhs.sparseResidencyImage2D) &&
+         (lhs.sparseResidencyImage3D == rhs.sparseResidencyImage3D) &&
+         (lhs.sparseResidency2Samples == rhs.sparseResidency2Samples) &&
+         (lhs.sparseResidency4Samples == rhs.sparseResidency4Samples) &&
+         (lhs.sparseResidency8Samples == rhs.sparseResidency8Samples) &&
+         (lhs.sparseResidency16Samples == rhs.sparseResidency16Samples) &&
+         (lhs.sparseResidencyAliased == rhs.sparseResidencyAliased) &&
+         (lhs.variableMultisampleRate == rhs.variableMultisampleRate) &&
+         (lhs.inheritedQueries == rhs.inheritedQueries);
+}
+
+bool operator!=(VkPhysicalDeviceFeatures const &lhs,
+                VkPhysicalDeviceFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSparseProperties const &lhs,
+                VkPhysicalDeviceSparseProperties const &rhs) noexcept {
+  return (lhs.residencyStandard2DBlockShape == rhs.residencyStandard2DBlockShape) &&
+         (lhs.residencyStandard2DMultisampleBlockShape == rhs.residencyStandard2DMultisampleBlockShape) &&
+         (lhs.residencyStandard3DBlockShape == rhs.residencyStandard3DBlockShape) &&
+         (lhs.residencyAlignedMipSize == rhs.residencyAlignedMipSize) &&
+         (lhs.residencyNonResidentStrict == rhs.residencyNonResidentStrict);
+}
+
+bool operator!=(VkPhysicalDeviceSparseProperties const &lhs,
+                VkPhysicalDeviceSparseProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceLimits const &lhs,
+                VkPhysicalDeviceLimits const &rhs) noexcept {
+  for(uint32_t i = 0; i < 3; ++i) {
+    if(lhs.maxComputeWorkGroupCount[i] != rhs.maxComputeWorkGroupCount[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 3; ++i) {
+    if(lhs.maxComputeWorkGroupSize[i] != rhs.maxComputeWorkGroupSize[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.maxViewportDimensions[i] != rhs.maxViewportDimensions[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.viewportBoundsRange[i] != rhs.viewportBoundsRange[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.pointSizeRange[i] != rhs.pointSizeRange[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.lineWidthRange[i] != rhs.lineWidthRange[i])
+      return false;
+  }
+
+  return (lhs.maxImageDimension1D == rhs.maxImageDimension1D) &&
+         (lhs.maxImageDimension2D == rhs.maxImageDimension2D) &&
+         (lhs.maxImageDimension3D == rhs.maxImageDimension3D) &&
+         (lhs.maxImageDimensionCube == rhs.maxImageDimensionCube) &&
+         (lhs.maxImageArrayLayers == rhs.maxImageArrayLayers) &&
+         (lhs.maxTexelBufferElements == rhs.maxTexelBufferElements) &&
+         (lhs.maxUniformBufferRange == rhs.maxUniformBufferRange) &&
+         (lhs.maxStorageBufferRange == rhs.maxStorageBufferRange) &&
+         (lhs.maxPushConstantsSize == rhs.maxPushConstantsSize) &&
+         (lhs.maxMemoryAllocationCount == rhs.maxMemoryAllocationCount) &&
+         (lhs.maxSamplerAllocationCount == rhs.maxSamplerAllocationCount) &&
+         (lhs.bufferImageGranularity == rhs.bufferImageGranularity) &&
+         (lhs.sparseAddressSpaceSize == rhs.sparseAddressSpaceSize) &&
+         (lhs.maxBoundDescriptorSets == rhs.maxBoundDescriptorSets) &&
+         (lhs.maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers) &&
+         (lhs.maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers) &&
+         (lhs.maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers) &&
+         (lhs.maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages) &&
+         (lhs.maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages) &&
+         (lhs.maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments) &&
+         (lhs.maxPerStageResources == rhs.maxPerStageResources) &&
+         (lhs.maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers) &&
+         (lhs.maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers) &&
+         (lhs.maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic) &&
+         (lhs.maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers) &&
+         (lhs.maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic) &&
+         (lhs.maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages) &&
+         (lhs.maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages) &&
+         (lhs.maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments) &&
+         (lhs.maxVertexInputAttributes == rhs.maxVertexInputAttributes) &&
+         (lhs.maxVertexInputBindings == rhs.maxVertexInputBindings) &&
+         (lhs.maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset) &&
+         (lhs.maxVertexInputBindingStride == rhs.maxVertexInputBindingStride) &&
+         (lhs.maxVertexOutputComponents == rhs.maxVertexOutputComponents) &&
+         (lhs.maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel) &&
+         (lhs.maxTessellationPatchSize == rhs.maxTessellationPatchSize) &&
+         (lhs.maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents) &&
+         (lhs.maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents) &&
+         (lhs.maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents) &&
+         (lhs.maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents) &&
+         (lhs.maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents) &&
+         (lhs.maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents) &&
+         (lhs.maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations) &&
+         (lhs.maxGeometryInputComponents == rhs.maxGeometryInputComponents) &&
+         (lhs.maxGeometryOutputComponents == rhs.maxGeometryOutputComponents) &&
+         (lhs.maxGeometryOutputVertices == rhs.maxGeometryOutputVertices) &&
+         (lhs.maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents) &&
+         (lhs.maxFragmentInputComponents == rhs.maxFragmentInputComponents) &&
+         (lhs.maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments) &&
+         (lhs.maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments) &&
+         (lhs.maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources) &&
+         (lhs.maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize) &&
+         (lhs.maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations) &&
+         (lhs.subPixelPrecisionBits == rhs.subPixelPrecisionBits) &&
+         (lhs.subTexelPrecisionBits == rhs.subTexelPrecisionBits) &&
+         (lhs.mipmapPrecisionBits == rhs.mipmapPrecisionBits) &&
+         (lhs.maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue) &&
+         (lhs.maxDrawIndirectCount == rhs.maxDrawIndirectCount) &&
+         (lhs.maxSamplerLodBias == rhs.maxSamplerLodBias) &&
+         (lhs.maxSamplerAnisotropy == rhs.maxSamplerAnisotropy) &&
+         (lhs.maxViewports == rhs.maxViewports) &&
+         (lhs.viewportSubPixelBits == rhs.viewportSubPixelBits) &&
+         (lhs.minMemoryMapAlignment == rhs.minMemoryMapAlignment) &&
+         (lhs.minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment) &&
+         (lhs.minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment) &&
+         (lhs.minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment) &&
+         (lhs.minTexelOffset == rhs.minTexelOffset) &&
+         (lhs.maxTexelOffset == rhs.maxTexelOffset) &&
+         (lhs.minTexelGatherOffset == rhs.minTexelGatherOffset) &&
+         (lhs.maxTexelGatherOffset == rhs.maxTexelGatherOffset) &&
+         (lhs.minInterpolationOffset == rhs.minInterpolationOffset) &&
+         (lhs.maxInterpolationOffset == rhs.maxInterpolationOffset) &&
+         (lhs.subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits) &&
+         (lhs.maxFramebufferWidth == rhs.maxFramebufferWidth) &&
+         (lhs.maxFramebufferHeight == rhs.maxFramebufferHeight) &&
+         (lhs.maxFramebufferLayers == rhs.maxFramebufferLayers) &&
+         (lhs.framebufferColorSampleCounts == rhs.framebufferColorSampleCounts) &&
+         (lhs.framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts) &&
+         (lhs.framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts) &&
+         (lhs.framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts) &&
+         (lhs.maxColorAttachments == rhs.maxColorAttachments) &&
+         (lhs.sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts) &&
+         (lhs.sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts) &&
+         (lhs.sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts) &&
+         (lhs.sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts) &&
+         (lhs.storageImageSampleCounts == rhs.storageImageSampleCounts) &&
+         (lhs.maxSampleMaskWords == rhs.maxSampleMaskWords) &&
+         (lhs.timestampComputeAndGraphics == rhs.timestampComputeAndGraphics) &&
+         (lhs.timestampPeriod == rhs.timestampPeriod) &&
+         (lhs.maxClipDistances == rhs.maxClipDistances) &&
+         (lhs.maxCullDistances == rhs.maxCullDistances) &&
+         (lhs.maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances) &&
+         (lhs.discreteQueuePriorities == rhs.discreteQueuePriorities) &&
+         (lhs.pointSizeGranularity == rhs.pointSizeGranularity) &&
+         (lhs.lineWidthGranularity == rhs.lineWidthGranularity) &&
+         (lhs.strictLines == rhs.strictLines) &&
+         (lhs.standardSampleLocations == rhs.standardSampleLocations) &&
+         (lhs.optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment) &&
+         (lhs.optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment) &&
+         (lhs.nonCoherentAtomSize == rhs.nonCoherentAtomSize);
+}
+
+bool operator!=(VkPhysicalDeviceLimits const &lhs,
+                VkPhysicalDeviceLimits const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSemaphoreCreateInfo const &lhs,
+                VkSemaphoreCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkSemaphoreCreateInfo const &lhs,
+                VkSemaphoreCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkQueryPoolCreateInfo const &lhs,
+                VkQueryPoolCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.queryType == rhs.queryType) &&
+         (lhs.queryCount == rhs.queryCount) &&
+         (lhs.pipelineStatistics == rhs.pipelineStatistics);
+}
+
+bool operator!=(VkQueryPoolCreateInfo const &lhs,
+                VkQueryPoolCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFramebufferCreateInfo const &lhs,
+                VkFramebufferCreateInfo const &rhs) noexcept {
+  if(lhs.attachmentCount != rhs.attachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.attachmentCount; ++i) {
+    if(lhs.pAttachments[i] != rhs.pAttachments[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.renderPass == rhs.renderPass) &&
+         (lhs.width == rhs.width) &&
+         (lhs.height == rhs.height) &&
+         (lhs.layers == rhs.layers);
+}
+
+bool operator!=(VkFramebufferCreateInfo const &lhs,
+                VkFramebufferCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDrawIndirectCommand const &lhs,
+                VkDrawIndirectCommand const &rhs) noexcept {
+  return (lhs.vertexCount == rhs.vertexCount) &&
+         (lhs.instanceCount == rhs.instanceCount) &&
+         (lhs.firstVertex == rhs.firstVertex) &&
+         (lhs.firstInstance == rhs.firstInstance);
+}
+
+bool operator!=(VkDrawIndirectCommand const &lhs,
+                VkDrawIndirectCommand const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDrawIndexedIndirectCommand const &lhs,
+                VkDrawIndexedIndirectCommand const &rhs) noexcept {
+  return (lhs.indexCount == rhs.indexCount) &&
+         (lhs.instanceCount == rhs.instanceCount) &&
+         (lhs.firstIndex == rhs.firstIndex) &&
+         (lhs.vertexOffset == rhs.vertexOffset) &&
+         (lhs.firstInstance == rhs.firstInstance);
+}
+
+bool operator!=(VkDrawIndexedIndirectCommand const &lhs,
+                VkDrawIndexedIndirectCommand const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDispatchIndirectCommand const &lhs,
+                VkDispatchIndirectCommand const &rhs) noexcept {
+  return (lhs.x == rhs.x) &&
+         (lhs.y == rhs.y) &&
+         (lhs.z == rhs.z);
+}
+
+bool operator!=(VkDispatchIndirectCommand const &lhs,
+                VkDispatchIndirectCommand const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMultiDrawInfoEXT const &lhs,
+                VkMultiDrawInfoEXT const &rhs) noexcept {
+  return (lhs.firstVertex == rhs.firstVertex) &&
+         (lhs.vertexCount == rhs.vertexCount);
+}
+
+bool operator!=(VkMultiDrawInfoEXT const &lhs,
+                VkMultiDrawInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMultiDrawIndexedInfoEXT const &lhs,
+                VkMultiDrawIndexedInfoEXT const &rhs) noexcept {
+  return (lhs.firstIndex == rhs.firstIndex) &&
+         (lhs.indexCount == rhs.indexCount) &&
+         (lhs.vertexOffset == rhs.vertexOffset);
+}
+
+bool operator!=(VkMultiDrawIndexedInfoEXT const &lhs,
+                VkMultiDrawIndexedInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubmitInfo const &lhs,
+                VkSubmitInfo const &rhs) noexcept {
+  if(lhs.waitSemaphoreCount != rhs.waitSemaphoreCount)
+    return false;
+
+  if(lhs.waitSemaphoreCount != rhs.waitSemaphoreCount)
+    return false;
+
+  if(lhs.commandBufferCount != rhs.commandBufferCount)
+    return false;
+
+  if(lhs.signalSemaphoreCount != rhs.signalSemaphoreCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.waitSemaphoreCount; ++i) {
+    if(lhs.pWaitSemaphores[i] != rhs.pWaitSemaphores[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.waitSemaphoreCount; ++i) {
+    if(lhs.pWaitDstStageMask[i] != rhs.pWaitDstStageMask[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.commandBufferCount; ++i) {
+    if(lhs.pCommandBuffers[i] != rhs.pCommandBuffers[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.signalSemaphoreCount; ++i) {
+    if(lhs.pSignalSemaphores[i] != rhs.pSignalSemaphores[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkSubmitInfo const &lhs,
+                VkSubmitInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayPropertiesKHR const &lhs,
+                VkDisplayPropertiesKHR const &rhs) noexcept {
+  if (lhs.displayName != rhs.displayName) {
+    if(lhs.displayName == nullptr || rhs.displayName == nullptr)
+      return false;
+    if(strcmp(lhs.displayName, rhs.displayName) != 0)
+      return false;
+  }
+
+  return (lhs.display == rhs.display) &&
+         (lhs.physicalDimensions == rhs.physicalDimensions) &&
+         (lhs.physicalResolution == rhs.physicalResolution) &&
+         (lhs.supportedTransforms == rhs.supportedTransforms) &&
+         (lhs.planeReorderPossible == rhs.planeReorderPossible) &&
+         (lhs.persistentContent == rhs.persistentContent);
+}
+
+bool operator!=(VkDisplayPropertiesKHR const &lhs,
+                VkDisplayPropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayPlanePropertiesKHR const &lhs,
+                VkDisplayPlanePropertiesKHR const &rhs) noexcept {
+  return (lhs.currentDisplay == rhs.currentDisplay) &&
+         (lhs.currentStackIndex == rhs.currentStackIndex);
+}
+
+bool operator!=(VkDisplayPlanePropertiesKHR const &lhs,
+                VkDisplayPlanePropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayModeParametersKHR const &lhs,
+                VkDisplayModeParametersKHR const &rhs) noexcept {
+  return (lhs.visibleRegion == rhs.visibleRegion) &&
+         (lhs.refreshRate == rhs.refreshRate);
+}
+
+bool operator!=(VkDisplayModeParametersKHR const &lhs,
+                VkDisplayModeParametersKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayModePropertiesKHR const &lhs,
+                VkDisplayModePropertiesKHR const &rhs) noexcept {
+  return (lhs.displayMode == rhs.displayMode) &&
+         (lhs.parameters == rhs.parameters);
+}
+
+bool operator!=(VkDisplayModePropertiesKHR const &lhs,
+                VkDisplayModePropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayModeCreateInfoKHR const &lhs,
+                VkDisplayModeCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.parameters == rhs.parameters);
+}
+
+bool operator!=(VkDisplayModeCreateInfoKHR const &lhs,
+                VkDisplayModeCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayPlaneCapabilitiesKHR const &lhs,
+                VkDisplayPlaneCapabilitiesKHR const &rhs) noexcept {
+  return (lhs.supportedAlpha == rhs.supportedAlpha) &&
+         (lhs.minSrcPosition == rhs.minSrcPosition) &&
+         (lhs.maxSrcPosition == rhs.maxSrcPosition) &&
+         (lhs.minSrcExtent == rhs.minSrcExtent) &&
+         (lhs.maxSrcExtent == rhs.maxSrcExtent) &&
+         (lhs.minDstPosition == rhs.minDstPosition) &&
+         (lhs.maxDstPosition == rhs.maxDstPosition) &&
+         (lhs.minDstExtent == rhs.minDstExtent) &&
+         (lhs.maxDstExtent == rhs.maxDstExtent);
+}
+
+bool operator!=(VkDisplayPlaneCapabilitiesKHR const &lhs,
+                VkDisplayPlaneCapabilitiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplaySurfaceCreateInfoKHR const &lhs,
+                VkDisplaySurfaceCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.displayMode == rhs.displayMode) &&
+         (lhs.planeIndex == rhs.planeIndex) &&
+         (lhs.planeStackIndex == rhs.planeStackIndex) &&
+         (lhs.transform == rhs.transform) &&
+         (lhs.globalAlpha == rhs.globalAlpha) &&
+         (lhs.alphaMode == rhs.alphaMode) &&
+         (lhs.imageExtent == rhs.imageExtent);
+}
+
+bool operator!=(VkDisplaySurfaceCreateInfoKHR const &lhs,
+                VkDisplaySurfaceCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayPresentInfoKHR const &lhs,
+                VkDisplayPresentInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcRect == rhs.srcRect) &&
+         (lhs.dstRect == rhs.dstRect) &&
+         (lhs.persistent == rhs.persistent);
+}
+
+bool operator!=(VkDisplayPresentInfoKHR const &lhs,
+                VkDisplayPresentInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSurfaceCapabilitiesKHR const &lhs,
+                VkSurfaceCapabilitiesKHR const &rhs) noexcept {
+  return (lhs.minImageCount == rhs.minImageCount) &&
+         (lhs.maxImageCount == rhs.maxImageCount) &&
+         (lhs.currentExtent == rhs.currentExtent) &&
+         (lhs.minImageExtent == rhs.minImageExtent) &&
+         (lhs.maxImageExtent == rhs.maxImageExtent) &&
+         (lhs.maxImageArrayLayers == rhs.maxImageArrayLayers) &&
+         (lhs.supportedTransforms == rhs.supportedTransforms) &&
+         (lhs.currentTransform == rhs.currentTransform) &&
+         (lhs.supportedCompositeAlpha == rhs.supportedCompositeAlpha) &&
+         (lhs.supportedUsageFlags == rhs.supportedUsageFlags);
+}
+
+bool operator!=(VkSurfaceCapabilitiesKHR const &lhs,
+                VkSurfaceCapabilitiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidSurfaceCreateInfoKHR const &lhs,
+                VkAndroidSurfaceCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.window == rhs.window);
+}
+
+bool operator!=(VkAndroidSurfaceCreateInfoKHR const &lhs,
+                VkAndroidSurfaceCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_VI_NN
+bool operator==(VkViSurfaceCreateInfoNN const &lhs,
+                VkViSurfaceCreateInfoNN const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.window == rhs.window);
+}
+
+bool operator!=(VkViSurfaceCreateInfoNN const &lhs,
+                VkViSurfaceCreateInfoNN const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_VI_NN
+
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+bool operator==(VkWaylandSurfaceCreateInfoKHR const &lhs,
+                VkWaylandSurfaceCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.display == rhs.display) &&
+         (lhs.surface == rhs.surface);
+}
+
+bool operator!=(VkWaylandSurfaceCreateInfoKHR const &lhs,
+                VkWaylandSurfaceCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WAYLAND_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkWin32SurfaceCreateInfoKHR const &lhs,
+                VkWin32SurfaceCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.hinstance == rhs.hinstance) &&
+         (lhs.hwnd == rhs.hwnd);
+}
+
+bool operator!=(VkWin32SurfaceCreateInfoKHR const &lhs,
+                VkWin32SurfaceCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+bool operator==(VkXlibSurfaceCreateInfoKHR const &lhs,
+                VkXlibSurfaceCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.dpy == rhs.dpy) &&
+         (lhs.window == rhs.window);
+}
+
+bool operator!=(VkXlibSurfaceCreateInfoKHR const &lhs,
+                VkXlibSurfaceCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_XLIB_KHR
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+bool operator==(VkXcbSurfaceCreateInfoKHR const &lhs,
+                VkXcbSurfaceCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.connection == rhs.connection) &&
+         (lhs.window == rhs.window);
+}
+
+bool operator!=(VkXcbSurfaceCreateInfoKHR const &lhs,
+                VkXcbSurfaceCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_XCB_KHR
+
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+bool operator==(VkDirectFBSurfaceCreateInfoEXT const &lhs,
+                VkDirectFBSurfaceCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.dfb == rhs.dfb) &&
+         (lhs.surface == rhs.surface);
+}
+
+bool operator!=(VkDirectFBSurfaceCreateInfoEXT const &lhs,
+                VkDirectFBSurfaceCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_DIRECTFB_EXT
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImagePipeSurfaceCreateInfoFUCHSIA const &lhs,
+                VkImagePipeSurfaceCreateInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.imagePipeHandle == rhs.imagePipeHandle);
+}
+
+bool operator!=(VkImagePipeSurfaceCreateInfoFUCHSIA const &lhs,
+                VkImagePipeSurfaceCreateInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_GGP
+bool operator==(VkStreamDescriptorSurfaceCreateInfoGGP const &lhs,
+                VkStreamDescriptorSurfaceCreateInfoGGP const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.streamDescriptor == rhs.streamDescriptor);
+}
+
+bool operator!=(VkStreamDescriptorSurfaceCreateInfoGGP const &lhs,
+                VkStreamDescriptorSurfaceCreateInfoGGP const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_GGP
+
+#ifdef VK_USE_PLATFORM_SCREEN_QNX
+bool operator==(VkScreenSurfaceCreateInfoQNX const &lhs,
+                VkScreenSurfaceCreateInfoQNX const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.context == rhs.context) &&
+         (lhs.window == rhs.window);
+}
+
+bool operator!=(VkScreenSurfaceCreateInfoQNX const &lhs,
+                VkScreenSurfaceCreateInfoQNX const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_SCREEN_QNX
+
+bool operator==(VkSurfaceFormatKHR const &lhs,
+                VkSurfaceFormatKHR const &rhs) noexcept {
+  return (lhs.format == rhs.format) &&
+         (lhs.colorSpace == rhs.colorSpace);
+}
+
+bool operator!=(VkSurfaceFormatKHR const &lhs,
+                VkSurfaceFormatKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSwapchainCreateInfoKHR const &lhs,
+                VkSwapchainCreateInfoKHR const &rhs) noexcept {
+  if(lhs.queueFamilyIndexCount != rhs.queueFamilyIndexCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.queueFamilyIndexCount; ++i) {
+    if(lhs.pQueueFamilyIndices[i] != rhs.pQueueFamilyIndices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.surface == rhs.surface) &&
+         (lhs.minImageCount == rhs.minImageCount) &&
+         (lhs.imageFormat == rhs.imageFormat) &&
+         (lhs.imageColorSpace == rhs.imageColorSpace) &&
+         (lhs.imageExtent == rhs.imageExtent) &&
+         (lhs.imageArrayLayers == rhs.imageArrayLayers) &&
+         (lhs.imageUsage == rhs.imageUsage) &&
+         (lhs.imageSharingMode == rhs.imageSharingMode) &&
+         (lhs.preTransform == rhs.preTransform) &&
+         (lhs.compositeAlpha == rhs.compositeAlpha) &&
+         (lhs.presentMode == rhs.presentMode) &&
+         (lhs.clipped == rhs.clipped) &&
+         (lhs.oldSwapchain == rhs.oldSwapchain);
+}
+
+bool operator!=(VkSwapchainCreateInfoKHR const &lhs,
+                VkSwapchainCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPresentInfoKHR const &lhs,
+                VkPresentInfoKHR const &rhs) noexcept {
+  if(lhs.waitSemaphoreCount != rhs.waitSemaphoreCount)
+    return false;
+
+  if(lhs.swapchainCount != rhs.swapchainCount)
+    return false;
+
+  if(lhs.swapchainCount != rhs.swapchainCount)
+    return false;
+
+  if(lhs.swapchainCount != rhs.swapchainCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.waitSemaphoreCount; ++i) {
+    if(lhs.pWaitSemaphores[i] != rhs.pWaitSemaphores[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.swapchainCount; ++i) {
+    if(lhs.pSwapchains[i] != rhs.pSwapchains[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.swapchainCount; ++i) {
+    if(lhs.pImageIndices[i] != rhs.pImageIndices[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.swapchainCount; ++i) {
+    if(lhs.pResults[i] != rhs.pResults[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkPresentInfoKHR const &lhs,
+                VkPresentInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDebugReportCallbackCreateInfoEXT const &lhs,
+                VkDebugReportCallbackCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pfnCallback == rhs.pfnCallback) &&
+         (lhs.pUserData == rhs.pUserData);
+}
+
+bool operator!=(VkDebugReportCallbackCreateInfoEXT const &lhs,
+                VkDebugReportCallbackCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkValidationFlagsEXT const &lhs,
+                VkValidationFlagsEXT const &rhs) noexcept {
+  if(lhs.disabledValidationCheckCount != rhs.disabledValidationCheckCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.disabledValidationCheckCount; ++i) {
+    if(lhs.pDisabledValidationChecks[i] != rhs.pDisabledValidationChecks[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkValidationFlagsEXT const &lhs,
+                VkValidationFlagsEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkValidationFeaturesEXT const &lhs,
+                VkValidationFeaturesEXT const &rhs) noexcept {
+  if(lhs.enabledValidationFeatureCount != rhs.enabledValidationFeatureCount)
+    return false;
+
+  if(lhs.disabledValidationFeatureCount != rhs.disabledValidationFeatureCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.enabledValidationFeatureCount; ++i) {
+    if(lhs.pEnabledValidationFeatures[i] != rhs.pEnabledValidationFeatures[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.disabledValidationFeatureCount; ++i) {
+    if(lhs.pDisabledValidationFeatures[i] != rhs.pDisabledValidationFeatures[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkValidationFeaturesEXT const &lhs,
+                VkValidationFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineRasterizationStateRasterizationOrderAMD const &lhs,
+                VkPipelineRasterizationStateRasterizationOrderAMD const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.rasterizationOrder == rhs.rasterizationOrder);
+}
+
+bool operator!=(VkPipelineRasterizationStateRasterizationOrderAMD const &lhs,
+                VkPipelineRasterizationStateRasterizationOrderAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDebugMarkerObjectNameInfoEXT const &lhs,
+                VkDebugMarkerObjectNameInfoEXT const &rhs) noexcept {
+  if (lhs.pObjectName != rhs.pObjectName) {
+    if(lhs.pObjectName == nullptr || rhs.pObjectName == nullptr)
+      return false;
+    if(strcmp(lhs.pObjectName, rhs.pObjectName) != 0)
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.objectType == rhs.objectType) &&
+         (lhs.object == rhs.object);
+}
+
+bool operator!=(VkDebugMarkerObjectNameInfoEXT const &lhs,
+                VkDebugMarkerObjectNameInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDebugMarkerObjectTagInfoEXT const &lhs,
+                VkDebugMarkerObjectTagInfoEXT const &rhs) noexcept {
+  if(lhs.tagSize != rhs.tagSize)
+    return false;
+
+  if(memcmp(lhs.pTag, rhs.pTag, lhs.tagSize) != 0)
+    return false;
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.objectType == rhs.objectType) &&
+         (lhs.object == rhs.object) &&
+         (lhs.tagName == rhs.tagName);
+}
+
+bool operator!=(VkDebugMarkerObjectTagInfoEXT const &lhs,
+                VkDebugMarkerObjectTagInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDebugMarkerMarkerInfoEXT const &lhs,
+                VkDebugMarkerMarkerInfoEXT const &rhs) noexcept {
+  if (lhs.pMarkerName != rhs.pMarkerName) {
+    if(lhs.pMarkerName == nullptr || rhs.pMarkerName == nullptr)
+      return false;
+    if(strcmp(lhs.pMarkerName, rhs.pMarkerName) != 0)
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 4; ++i) {
+    if(lhs.color[i] != rhs.color[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkDebugMarkerMarkerInfoEXT const &lhs,
+                VkDebugMarkerMarkerInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDedicatedAllocationImageCreateInfoNV const &lhs,
+                VkDedicatedAllocationImageCreateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.dedicatedAllocation == rhs.dedicatedAllocation);
+}
+
+bool operator!=(VkDedicatedAllocationImageCreateInfoNV const &lhs,
+                VkDedicatedAllocationImageCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDedicatedAllocationBufferCreateInfoNV const &lhs,
+                VkDedicatedAllocationBufferCreateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.dedicatedAllocation == rhs.dedicatedAllocation);
+}
+
+bool operator!=(VkDedicatedAllocationBufferCreateInfoNV const &lhs,
+                VkDedicatedAllocationBufferCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDedicatedAllocationMemoryAllocateInfoNV const &lhs,
+                VkDedicatedAllocationMemoryAllocateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.image == rhs.image) &&
+         (lhs.buffer == rhs.buffer);
+}
+
+bool operator!=(VkDedicatedAllocationMemoryAllocateInfoNV const &lhs,
+                VkDedicatedAllocationMemoryAllocateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExternalImageFormatPropertiesNV const &lhs,
+                VkExternalImageFormatPropertiesNV const &rhs) noexcept {
+  return (lhs.imageFormatProperties == rhs.imageFormatProperties) &&
+         (lhs.externalMemoryFeatures == rhs.externalMemoryFeatures) &&
+         (lhs.exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes) &&
+         (lhs.compatibleHandleTypes == rhs.compatibleHandleTypes);
+}
+
+bool operator!=(VkExternalImageFormatPropertiesNV const &lhs,
+                VkExternalImageFormatPropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExternalMemoryImageCreateInfoNV const &lhs,
+                VkExternalMemoryImageCreateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleTypes == rhs.handleTypes);
+}
+
+bool operator!=(VkExternalMemoryImageCreateInfoNV const &lhs,
+                VkExternalMemoryImageCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExportMemoryAllocateInfoNV const &lhs,
+                VkExportMemoryAllocateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleTypes == rhs.handleTypes);
+}
+
+bool operator!=(VkExportMemoryAllocateInfoNV const &lhs,
+                VkExportMemoryAllocateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkImportMemoryWin32HandleInfoNV const &lhs,
+                VkImportMemoryWin32HandleInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.handle == rhs.handle);
+}
+
+bool operator!=(VkImportMemoryWin32HandleInfoNV const &lhs,
+                VkImportMemoryWin32HandleInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkExportMemoryWin32HandleInfoNV const &lhs,
+                VkExportMemoryWin32HandleInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pAttributes == rhs.pAttributes) &&
+         (lhs.dwAccess == rhs.dwAccess);
+}
+
+bool operator!=(VkExportMemoryWin32HandleInfoNV const &lhs,
+                VkExportMemoryWin32HandleInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkWin32KeyedMutexAcquireReleaseInfoNV const &lhs,
+                VkWin32KeyedMutexAcquireReleaseInfoNV const &rhs) noexcept {
+  if(lhs.acquireCount != rhs.acquireCount)
+    return false;
+
+  if(lhs.acquireCount != rhs.acquireCount)
+    return false;
+
+  if(lhs.acquireCount != rhs.acquireCount)
+    return false;
+
+  if(lhs.releaseCount != rhs.releaseCount)
+    return false;
+
+  if(lhs.releaseCount != rhs.releaseCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.acquireCount; ++i) {
+    if(lhs.pAcquireSyncs[i] != rhs.pAcquireSyncs[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.acquireCount; ++i) {
+    if(lhs.pAcquireKeys[i] != rhs.pAcquireKeys[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.acquireCount; ++i) {
+    if(lhs.pAcquireTimeoutMilliseconds[i] != rhs.pAcquireTimeoutMilliseconds[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.releaseCount; ++i) {
+    if(lhs.pReleaseSyncs[i] != rhs.pReleaseSyncs[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.releaseCount; ++i) {
+    if(lhs.pReleaseKeys[i] != rhs.pReleaseKeys[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkWin32KeyedMutexAcquireReleaseInfoNV const &lhs,
+                VkWin32KeyedMutexAcquireReleaseInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &lhs,
+                VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceGeneratedCommands == rhs.deviceGeneratedCommands);
+}
+
+bool operator!=(VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &lhs,
+                VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDevicePrivateDataCreateInfoEXT const &lhs,
+                VkDevicePrivateDataCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.privateDataSlotRequestCount == rhs.privateDataSlotRequestCount);
+}
+
+bool operator!=(VkDevicePrivateDataCreateInfoEXT const &lhs,
+                VkDevicePrivateDataCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPrivateDataSlotCreateInfoEXT const &lhs,
+                VkPrivateDataSlotCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkPrivateDataSlotCreateInfoEXT const &lhs,
+                VkPrivateDataSlotCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePrivateDataFeaturesEXT const &lhs,
+                VkPhysicalDevicePrivateDataFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.privateData == rhs.privateData);
+}
+
+bool operator!=(VkPhysicalDevicePrivateDataFeaturesEXT const &lhs,
+                VkPhysicalDevicePrivateDataFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &lhs,
+                VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxGraphicsShaderGroupCount == rhs.maxGraphicsShaderGroupCount) &&
+         (lhs.maxIndirectSequenceCount == rhs.maxIndirectSequenceCount) &&
+         (lhs.maxIndirectCommandsTokenCount == rhs.maxIndirectCommandsTokenCount) &&
+         (lhs.maxIndirectCommandsStreamCount == rhs.maxIndirectCommandsStreamCount) &&
+         (lhs.maxIndirectCommandsTokenOffset == rhs.maxIndirectCommandsTokenOffset) &&
+         (lhs.maxIndirectCommandsStreamStride == rhs.maxIndirectCommandsStreamStride) &&
+         (lhs.minSequencesCountBufferOffsetAlignment == rhs.minSequencesCountBufferOffsetAlignment) &&
+         (lhs.minSequencesIndexBufferOffsetAlignment == rhs.minSequencesIndexBufferOffsetAlignment) &&
+         (lhs.minIndirectCommandsBufferOffsetAlignment == rhs.minIndirectCommandsBufferOffsetAlignment);
+}
+
+bool operator!=(VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &lhs,
+                VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMultiDrawPropertiesEXT const &lhs,
+                VkPhysicalDeviceMultiDrawPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxMultiDrawCount == rhs.maxMultiDrawCount);
+}
+
+bool operator!=(VkPhysicalDeviceMultiDrawPropertiesEXT const &lhs,
+                VkPhysicalDeviceMultiDrawPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkGraphicsShaderGroupCreateInfoNV const &lhs,
+                VkGraphicsShaderGroupCreateInfoNV const &rhs) noexcept {
+  if(lhs.stageCount != rhs.stageCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.stageCount; ++i) {
+    if(lhs.pStages[i] != rhs.pStages[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pVertexInputState == rhs.pVertexInputState) &&
+         (lhs.pTessellationState == rhs.pTessellationState);
+}
+
+bool operator!=(VkGraphicsShaderGroupCreateInfoNV const &lhs,
+                VkGraphicsShaderGroupCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkGraphicsPipelineShaderGroupsCreateInfoNV const &lhs,
+                VkGraphicsPipelineShaderGroupsCreateInfoNV const &rhs) noexcept {
+  if(lhs.groupCount != rhs.groupCount)
+    return false;
+
+  if(lhs.pipelineCount != rhs.pipelineCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.groupCount; ++i) {
+    if(lhs.pGroups[i] != rhs.pGroups[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.pipelineCount; ++i) {
+    if(lhs.pPipelines[i] != rhs.pPipelines[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkGraphicsPipelineShaderGroupsCreateInfoNV const &lhs,
+                VkGraphicsPipelineShaderGroupsCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindShaderGroupIndirectCommandNV const &lhs,
+                VkBindShaderGroupIndirectCommandNV const &rhs) noexcept {
+  return (lhs.groupIndex == rhs.groupIndex);
+}
+
+bool operator!=(VkBindShaderGroupIndirectCommandNV const &lhs,
+                VkBindShaderGroupIndirectCommandNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindIndexBufferIndirectCommandNV const &lhs,
+                VkBindIndexBufferIndirectCommandNV const &rhs) noexcept {
+  return (lhs.bufferAddress == rhs.bufferAddress) &&
+         (lhs.size == rhs.size) &&
+         (lhs.indexType == rhs.indexType);
+}
+
+bool operator!=(VkBindIndexBufferIndirectCommandNV const &lhs,
+                VkBindIndexBufferIndirectCommandNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindVertexBufferIndirectCommandNV const &lhs,
+                VkBindVertexBufferIndirectCommandNV const &rhs) noexcept {
+  return (lhs.bufferAddress == rhs.bufferAddress) &&
+         (lhs.size == rhs.size) &&
+         (lhs.stride == rhs.stride);
+}
+
+bool operator!=(VkBindVertexBufferIndirectCommandNV const &lhs,
+                VkBindVertexBufferIndirectCommandNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSetStateFlagsIndirectCommandNV const &lhs,
+                VkSetStateFlagsIndirectCommandNV const &rhs) noexcept {
+  return (lhs.data == rhs.data);
+}
+
+bool operator!=(VkSetStateFlagsIndirectCommandNV const &lhs,
+                VkSetStateFlagsIndirectCommandNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkIndirectCommandsStreamNV const &lhs,
+                VkIndirectCommandsStreamNV const &rhs) noexcept {
+  return (lhs.buffer == rhs.buffer) &&
+         (lhs.offset == rhs.offset);
+}
+
+bool operator!=(VkIndirectCommandsStreamNV const &lhs,
+                VkIndirectCommandsStreamNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkIndirectCommandsLayoutTokenNV const &lhs,
+                VkIndirectCommandsLayoutTokenNV const &rhs) noexcept {
+  if(lhs.indexTypeCount != rhs.indexTypeCount)
+    return false;
+
+  if(lhs.indexTypeCount != rhs.indexTypeCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.indexTypeCount; ++i) {
+    if(lhs.pIndexTypes[i] != rhs.pIndexTypes[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.indexTypeCount; ++i) {
+    if(lhs.pIndexTypeValues[i] != rhs.pIndexTypeValues[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.tokenType == rhs.tokenType) &&
+         (lhs.stream == rhs.stream) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.vertexBindingUnit == rhs.vertexBindingUnit) &&
+         (lhs.vertexDynamicStride == rhs.vertexDynamicStride) &&
+         (lhs.pushconstantPipelineLayout == rhs.pushconstantPipelineLayout) &&
+         (lhs.pushconstantShaderStageFlags == rhs.pushconstantShaderStageFlags) &&
+         (lhs.pushconstantOffset == rhs.pushconstantOffset) &&
+         (lhs.pushconstantSize == rhs.pushconstantSize) &&
+         (lhs.indirectStateFlags == rhs.indirectStateFlags);
+}
+
+bool operator!=(VkIndirectCommandsLayoutTokenNV const &lhs,
+                VkIndirectCommandsLayoutTokenNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkIndirectCommandsLayoutCreateInfoNV const &lhs,
+                VkIndirectCommandsLayoutCreateInfoNV const &rhs) noexcept {
+  if(lhs.tokenCount != rhs.tokenCount)
+    return false;
+
+  if(lhs.streamCount != rhs.streamCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.tokenCount; ++i) {
+    if(lhs.pTokens[i] != rhs.pTokens[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.streamCount; ++i) {
+    if(lhs.pStreamStrides[i] != rhs.pStreamStrides[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pipelineBindPoint == rhs.pipelineBindPoint);
+}
+
+bool operator!=(VkIndirectCommandsLayoutCreateInfoNV const &lhs,
+                VkIndirectCommandsLayoutCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkGeneratedCommandsInfoNV const &lhs,
+                VkGeneratedCommandsInfoNV const &rhs) noexcept {
+  if(lhs.streamCount != rhs.streamCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.streamCount; ++i) {
+    if(lhs.pStreams[i] != rhs.pStreams[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pipelineBindPoint == rhs.pipelineBindPoint) &&
+         (lhs.pipeline == rhs.pipeline) &&
+         (lhs.indirectCommandsLayout == rhs.indirectCommandsLayout) &&
+         (lhs.sequencesCount == rhs.sequencesCount) &&
+         (lhs.preprocessBuffer == rhs.preprocessBuffer) &&
+         (lhs.preprocessOffset == rhs.preprocessOffset) &&
+         (lhs.preprocessSize == rhs.preprocessSize) &&
+         (lhs.sequencesCountBuffer == rhs.sequencesCountBuffer) &&
+         (lhs.sequencesCountOffset == rhs.sequencesCountOffset) &&
+         (lhs.sequencesIndexBuffer == rhs.sequencesIndexBuffer) &&
+         (lhs.sequencesIndexOffset == rhs.sequencesIndexOffset);
+}
+
+bool operator!=(VkGeneratedCommandsInfoNV const &lhs,
+                VkGeneratedCommandsInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkGeneratedCommandsMemoryRequirementsInfoNV const &lhs,
+                VkGeneratedCommandsMemoryRequirementsInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pipelineBindPoint == rhs.pipelineBindPoint) &&
+         (lhs.pipeline == rhs.pipeline) &&
+         (lhs.indirectCommandsLayout == rhs.indirectCommandsLayout) &&
+         (lhs.maxSequencesCount == rhs.maxSequencesCount);
+}
+
+bool operator!=(VkGeneratedCommandsMemoryRequirementsInfoNV const &lhs,
+                VkGeneratedCommandsMemoryRequirementsInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFeatures2 const &lhs,
+                VkPhysicalDeviceFeatures2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.features == rhs.features);
+}
+
+bool operator!=(VkPhysicalDeviceFeatures2 const &lhs,
+                VkPhysicalDeviceFeatures2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceProperties2 const &lhs,
+                VkPhysicalDeviceProperties2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.properties == rhs.properties);
+}
+
+bool operator!=(VkPhysicalDeviceProperties2 const &lhs,
+                VkPhysicalDeviceProperties2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFormatProperties2 const &lhs,
+                VkFormatProperties2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.formatProperties == rhs.formatProperties);
+}
+
+bool operator!=(VkFormatProperties2 const &lhs,
+                VkFormatProperties2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageFormatProperties2 const &lhs,
+                VkImageFormatProperties2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.imageFormatProperties == rhs.imageFormatProperties);
+}
+
+bool operator!=(VkImageFormatProperties2 const &lhs,
+                VkImageFormatProperties2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceImageFormatInfo2 const &lhs,
+                VkPhysicalDeviceImageFormatInfo2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.format == rhs.format) &&
+         (lhs.type == rhs.type) &&
+         (lhs.tiling == rhs.tiling) &&
+         (lhs.usage == rhs.usage) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkPhysicalDeviceImageFormatInfo2 const &lhs,
+                VkPhysicalDeviceImageFormatInfo2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkQueueFamilyProperties2 const &lhs,
+                VkQueueFamilyProperties2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.queueFamilyProperties == rhs.queueFamilyProperties);
+}
+
+bool operator!=(VkQueueFamilyProperties2 const &lhs,
+                VkQueueFamilyProperties2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMemoryProperties2 const &lhs,
+                VkPhysicalDeviceMemoryProperties2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryProperties == rhs.memoryProperties);
+}
+
+bool operator!=(VkPhysicalDeviceMemoryProperties2 const &lhs,
+                VkPhysicalDeviceMemoryProperties2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSparseImageFormatProperties2 const &lhs,
+                VkSparseImageFormatProperties2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.properties == rhs.properties);
+}
+
+bool operator!=(VkSparseImageFormatProperties2 const &lhs,
+                VkSparseImageFormatProperties2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSparseImageFormatInfo2 const &lhs,
+                VkPhysicalDeviceSparseImageFormatInfo2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.format == rhs.format) &&
+         (lhs.type == rhs.type) &&
+         (lhs.samples == rhs.samples) &&
+         (lhs.usage == rhs.usage) &&
+         (lhs.tiling == rhs.tiling);
+}
+
+bool operator!=(VkPhysicalDeviceSparseImageFormatInfo2 const &lhs,
+                VkPhysicalDeviceSparseImageFormatInfo2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePushDescriptorPropertiesKHR const &lhs,
+                VkPhysicalDevicePushDescriptorPropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxPushDescriptors == rhs.maxPushDescriptors);
+}
+
+bool operator!=(VkPhysicalDevicePushDescriptorPropertiesKHR const &lhs,
+                VkPhysicalDevicePushDescriptorPropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkConformanceVersion const &lhs,
+                VkConformanceVersion const &rhs) noexcept {
+  return (lhs.major == rhs.major) &&
+         (lhs.minor == rhs.minor) &&
+         (lhs.subminor == rhs.subminor) &&
+         (lhs.patch == rhs.patch);
+}
+
+bool operator!=(VkConformanceVersion const &lhs,
+                VkConformanceVersion const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDriverProperties const &lhs,
+                VkPhysicalDeviceDriverProperties const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_DRIVER_NAME_SIZE; ++i) {
+    if(lhs.driverName[i] != rhs.driverName[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_DRIVER_INFO_SIZE; ++i) {
+    if(lhs.driverInfo[i] != rhs.driverInfo[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.driverID == rhs.driverID) &&
+         (lhs.conformanceVersion == rhs.conformanceVersion);
+}
+
+bool operator!=(VkPhysicalDeviceDriverProperties const &lhs,
+                VkPhysicalDeviceDriverProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPresentRegionsKHR const &lhs,
+                VkPresentRegionsKHR const &rhs) noexcept {
+  if(lhs.swapchainCount != rhs.swapchainCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.swapchainCount; ++i) {
+    if(lhs.pRegions[i] != rhs.pRegions[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkPresentRegionsKHR const &lhs,
+                VkPresentRegionsKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPresentRegionKHR const &lhs,
+                VkPresentRegionKHR const &rhs) noexcept {
+  if(lhs.rectangleCount != rhs.rectangleCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.rectangleCount; ++i) {
+    if(lhs.pRectangles[i] != rhs.pRectangles[i])
+      return false;
+  }
+
+  return true;
+}
+
+bool operator!=(VkPresentRegionKHR const &lhs,
+                VkPresentRegionKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRectLayerKHR const &lhs,
+                VkRectLayerKHR const &rhs) noexcept {
+  return (lhs.offset == rhs.offset) &&
+         (lhs.extent == rhs.extent) &&
+         (lhs.layer == rhs.layer);
+}
+
+bool operator!=(VkRectLayerKHR const &lhs,
+                VkRectLayerKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceVariablePointersFeatures const &lhs,
+                VkPhysicalDeviceVariablePointersFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.variablePointersStorageBuffer == rhs.variablePointersStorageBuffer) &&
+         (lhs.variablePointers == rhs.variablePointers);
+}
+
+bool operator!=(VkPhysicalDeviceVariablePointersFeatures const &lhs,
+                VkPhysicalDeviceVariablePointersFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExternalMemoryProperties const &lhs,
+                VkExternalMemoryProperties const &rhs) noexcept {
+  return (lhs.externalMemoryFeatures == rhs.externalMemoryFeatures) &&
+         (lhs.exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes) &&
+         (lhs.compatibleHandleTypes == rhs.compatibleHandleTypes);
+}
+
+bool operator!=(VkExternalMemoryProperties const &lhs,
+                VkExternalMemoryProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceExternalImageFormatInfo const &lhs,
+                VkPhysicalDeviceExternalImageFormatInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkPhysicalDeviceExternalImageFormatInfo const &lhs,
+                VkPhysicalDeviceExternalImageFormatInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExternalImageFormatProperties const &lhs,
+                VkExternalImageFormatProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.externalMemoryProperties == rhs.externalMemoryProperties);
+}
+
+bool operator!=(VkExternalImageFormatProperties const &lhs,
+                VkExternalImageFormatProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceExternalBufferInfo const &lhs,
+                VkPhysicalDeviceExternalBufferInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.usage == rhs.usage) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkPhysicalDeviceExternalBufferInfo const &lhs,
+                VkPhysicalDeviceExternalBufferInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExternalBufferProperties const &lhs,
+                VkExternalBufferProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.externalMemoryProperties == rhs.externalMemoryProperties);
+}
+
+bool operator!=(VkExternalBufferProperties const &lhs,
+                VkExternalBufferProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceIDProperties const &lhs,
+                VkPhysicalDeviceIDProperties const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_UUID_SIZE; ++i) {
+    if(lhs.deviceUUID[i] != rhs.deviceUUID[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_UUID_SIZE; ++i) {
+    if(lhs.driverUUID[i] != rhs.driverUUID[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_LUID_SIZE; ++i) {
+    if(lhs.deviceLUID[i] != rhs.deviceLUID[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceNodeMask == rhs.deviceNodeMask) &&
+         (lhs.deviceLUIDValid == rhs.deviceLUIDValid);
+}
+
+bool operator!=(VkPhysicalDeviceIDProperties const &lhs,
+                VkPhysicalDeviceIDProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExternalMemoryImageCreateInfo const &lhs,
+                VkExternalMemoryImageCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleTypes == rhs.handleTypes);
+}
+
+bool operator!=(VkExternalMemoryImageCreateInfo const &lhs,
+                VkExternalMemoryImageCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExternalMemoryBufferCreateInfo const &lhs,
+                VkExternalMemoryBufferCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleTypes == rhs.handleTypes);
+}
+
+bool operator!=(VkExternalMemoryBufferCreateInfo const &lhs,
+                VkExternalMemoryBufferCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExportMemoryAllocateInfo const &lhs,
+                VkExportMemoryAllocateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleTypes == rhs.handleTypes);
+}
+
+bool operator!=(VkExportMemoryAllocateInfo const &lhs,
+                VkExportMemoryAllocateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkImportMemoryWin32HandleInfoKHR const &lhs,
+                VkImportMemoryWin32HandleInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.handle == rhs.handle) &&
+         (lhs.name == rhs.name);
+}
+
+bool operator!=(VkImportMemoryWin32HandleInfoKHR const &lhs,
+                VkImportMemoryWin32HandleInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkExportMemoryWin32HandleInfoKHR const &lhs,
+                VkExportMemoryWin32HandleInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pAttributes == rhs.pAttributes) &&
+         (lhs.dwAccess == rhs.dwAccess) &&
+         (lhs.name == rhs.name);
+}
+
+bool operator!=(VkExportMemoryWin32HandleInfoKHR const &lhs,
+                VkExportMemoryWin32HandleInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImportMemoryZirconHandleInfoFUCHSIA const &lhs,
+                VkImportMemoryZirconHandleInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.handle == rhs.handle);
+}
+
+bool operator!=(VkImportMemoryZirconHandleInfoFUCHSIA const &lhs,
+                VkImportMemoryZirconHandleInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkMemoryZirconHandlePropertiesFUCHSIA const &lhs,
+                VkMemoryZirconHandlePropertiesFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryTypeBits == rhs.memoryTypeBits);
+}
+
+bool operator!=(VkMemoryZirconHandlePropertiesFUCHSIA const &lhs,
+                VkMemoryZirconHandlePropertiesFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkMemoryGetZirconHandleInfoFUCHSIA const &lhs,
+                VkMemoryGetZirconHandleInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkMemoryGetZirconHandleInfoFUCHSIA const &lhs,
+                VkMemoryGetZirconHandleInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkMemoryWin32HandlePropertiesKHR const &lhs,
+                VkMemoryWin32HandlePropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryTypeBits == rhs.memoryTypeBits);
+}
+
+bool operator!=(VkMemoryWin32HandlePropertiesKHR const &lhs,
+                VkMemoryWin32HandlePropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkMemoryGetWin32HandleInfoKHR const &lhs,
+                VkMemoryGetWin32HandleInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkMemoryGetWin32HandleInfoKHR const &lhs,
+                VkMemoryGetWin32HandleInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkImportMemoryFdInfoKHR const &lhs,
+                VkImportMemoryFdInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.fd == rhs.fd);
+}
+
+bool operator!=(VkImportMemoryFdInfoKHR const &lhs,
+                VkImportMemoryFdInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryFdPropertiesKHR const &lhs,
+                VkMemoryFdPropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryTypeBits == rhs.memoryTypeBits);
+}
+
+bool operator!=(VkMemoryFdPropertiesKHR const &lhs,
+                VkMemoryFdPropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryGetFdInfoKHR const &lhs,
+                VkMemoryGetFdInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkMemoryGetFdInfoKHR const &lhs,
+                VkMemoryGetFdInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkWin32KeyedMutexAcquireReleaseInfoKHR const &lhs,
+                VkWin32KeyedMutexAcquireReleaseInfoKHR const &rhs) noexcept {
+  if(lhs.acquireCount != rhs.acquireCount)
+    return false;
+
+  if(lhs.acquireCount != rhs.acquireCount)
+    return false;
+
+  if(lhs.acquireCount != rhs.acquireCount)
+    return false;
+
+  if(lhs.releaseCount != rhs.releaseCount)
+    return false;
+
+  if(lhs.releaseCount != rhs.releaseCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.acquireCount; ++i) {
+    if(lhs.pAcquireSyncs[i] != rhs.pAcquireSyncs[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.acquireCount; ++i) {
+    if(lhs.pAcquireKeys[i] != rhs.pAcquireKeys[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.acquireCount; ++i) {
+    if(lhs.pAcquireTimeouts[i] != rhs.pAcquireTimeouts[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.releaseCount; ++i) {
+    if(lhs.pReleaseSyncs[i] != rhs.pReleaseSyncs[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.releaseCount; ++i) {
+    if(lhs.pReleaseKeys[i] != rhs.pReleaseKeys[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkWin32KeyedMutexAcquireReleaseInfoKHR const &lhs,
+                VkWin32KeyedMutexAcquireReleaseInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkPhysicalDeviceExternalSemaphoreInfo const &lhs,
+                VkPhysicalDeviceExternalSemaphoreInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkPhysicalDeviceExternalSemaphoreInfo const &lhs,
+                VkPhysicalDeviceExternalSemaphoreInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExternalSemaphoreProperties const &lhs,
+                VkExternalSemaphoreProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes) &&
+         (lhs.compatibleHandleTypes == rhs.compatibleHandleTypes) &&
+         (lhs.externalSemaphoreFeatures == rhs.externalSemaphoreFeatures);
+}
+
+bool operator!=(VkExternalSemaphoreProperties const &lhs,
+                VkExternalSemaphoreProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExportSemaphoreCreateInfo const &lhs,
+                VkExportSemaphoreCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleTypes == rhs.handleTypes);
+}
+
+bool operator!=(VkExportSemaphoreCreateInfo const &lhs,
+                VkExportSemaphoreCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkImportSemaphoreWin32HandleInfoKHR const &lhs,
+                VkImportSemaphoreWin32HandleInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.semaphore == rhs.semaphore) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.handle == rhs.handle) &&
+         (lhs.name == rhs.name);
+}
+
+bool operator!=(VkImportSemaphoreWin32HandleInfoKHR const &lhs,
+                VkImportSemaphoreWin32HandleInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkExportSemaphoreWin32HandleInfoKHR const &lhs,
+                VkExportSemaphoreWin32HandleInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pAttributes == rhs.pAttributes) &&
+         (lhs.dwAccess == rhs.dwAccess) &&
+         (lhs.name == rhs.name);
+}
+
+bool operator!=(VkExportSemaphoreWin32HandleInfoKHR const &lhs,
+                VkExportSemaphoreWin32HandleInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkD3D12FenceSubmitInfoKHR const &lhs,
+                VkD3D12FenceSubmitInfoKHR const &rhs) noexcept {
+  if(lhs.waitSemaphoreValuesCount != rhs.waitSemaphoreValuesCount)
+    return false;
+
+  if(lhs.signalSemaphoreValuesCount != rhs.signalSemaphoreValuesCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.waitSemaphoreValuesCount; ++i) {
+    if(lhs.pWaitSemaphoreValues[i] != rhs.pWaitSemaphoreValues[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.signalSemaphoreValuesCount; ++i) {
+    if(lhs.pSignalSemaphoreValues[i] != rhs.pSignalSemaphoreValues[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkD3D12FenceSubmitInfoKHR const &lhs,
+                VkD3D12FenceSubmitInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkSemaphoreGetWin32HandleInfoKHR const &lhs,
+                VkSemaphoreGetWin32HandleInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.semaphore == rhs.semaphore) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkSemaphoreGetWin32HandleInfoKHR const &lhs,
+                VkSemaphoreGetWin32HandleInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkImportSemaphoreFdInfoKHR const &lhs,
+                VkImportSemaphoreFdInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.semaphore == rhs.semaphore) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.fd == rhs.fd);
+}
+
+bool operator!=(VkImportSemaphoreFdInfoKHR const &lhs,
+                VkImportSemaphoreFdInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSemaphoreGetFdInfoKHR const &lhs,
+                VkSemaphoreGetFdInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.semaphore == rhs.semaphore) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkSemaphoreGetFdInfoKHR const &lhs,
+                VkSemaphoreGetFdInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImportSemaphoreZirconHandleInfoFUCHSIA const &lhs,
+                VkImportSemaphoreZirconHandleInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.semaphore == rhs.semaphore) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.zirconHandle == rhs.zirconHandle);
+}
+
+bool operator!=(VkImportSemaphoreZirconHandleInfoFUCHSIA const &lhs,
+                VkImportSemaphoreZirconHandleInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkSemaphoreGetZirconHandleInfoFUCHSIA const &lhs,
+                VkSemaphoreGetZirconHandleInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.semaphore == rhs.semaphore) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkSemaphoreGetZirconHandleInfoFUCHSIA const &lhs,
+                VkSemaphoreGetZirconHandleInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+bool operator==(VkPhysicalDeviceExternalFenceInfo const &lhs,
+                VkPhysicalDeviceExternalFenceInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkPhysicalDeviceExternalFenceInfo const &lhs,
+                VkPhysicalDeviceExternalFenceInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExternalFenceProperties const &lhs,
+                VkExternalFenceProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes) &&
+         (lhs.compatibleHandleTypes == rhs.compatibleHandleTypes) &&
+         (lhs.externalFenceFeatures == rhs.externalFenceFeatures);
+}
+
+bool operator!=(VkExternalFenceProperties const &lhs,
+                VkExternalFenceProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkExportFenceCreateInfo const &lhs,
+                VkExportFenceCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleTypes == rhs.handleTypes);
+}
+
+bool operator!=(VkExportFenceCreateInfo const &lhs,
+                VkExportFenceCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkImportFenceWin32HandleInfoKHR const &lhs,
+                VkImportFenceWin32HandleInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fence == rhs.fence) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.handle == rhs.handle) &&
+         (lhs.name == rhs.name);
+}
+
+bool operator!=(VkImportFenceWin32HandleInfoKHR const &lhs,
+                VkImportFenceWin32HandleInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkExportFenceWin32HandleInfoKHR const &lhs,
+                VkExportFenceWin32HandleInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pAttributes == rhs.pAttributes) &&
+         (lhs.dwAccess == rhs.dwAccess) &&
+         (lhs.name == rhs.name);
+}
+
+bool operator!=(VkExportFenceWin32HandleInfoKHR const &lhs,
+                VkExportFenceWin32HandleInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkFenceGetWin32HandleInfoKHR const &lhs,
+                VkFenceGetWin32HandleInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fence == rhs.fence) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkFenceGetWin32HandleInfoKHR const &lhs,
+                VkFenceGetWin32HandleInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkImportFenceFdInfoKHR const &lhs,
+                VkImportFenceFdInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fence == rhs.fence) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.fd == rhs.fd);
+}
+
+bool operator!=(VkImportFenceFdInfoKHR const &lhs,
+                VkImportFenceFdInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFenceGetFdInfoKHR const &lhs,
+                VkFenceGetFdInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fence == rhs.fence) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkFenceGetFdInfoKHR const &lhs,
+                VkFenceGetFdInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMultiviewFeatures const &lhs,
+                VkPhysicalDeviceMultiviewFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.multiview == rhs.multiview) &&
+         (lhs.multiviewGeometryShader == rhs.multiviewGeometryShader) &&
+         (lhs.multiviewTessellationShader == rhs.multiviewTessellationShader);
+}
+
+bool operator!=(VkPhysicalDeviceMultiviewFeatures const &lhs,
+                VkPhysicalDeviceMultiviewFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMultiviewProperties const &lhs,
+                VkPhysicalDeviceMultiviewProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxMultiviewViewCount == rhs.maxMultiviewViewCount) &&
+         (lhs.maxMultiviewInstanceIndex == rhs.maxMultiviewInstanceIndex);
+}
+
+bool operator!=(VkPhysicalDeviceMultiviewProperties const &lhs,
+                VkPhysicalDeviceMultiviewProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderPassMultiviewCreateInfo const &lhs,
+                VkRenderPassMultiviewCreateInfo const &rhs) noexcept {
+  if(lhs.subpassCount != rhs.subpassCount)
+    return false;
+
+  if(lhs.dependencyCount != rhs.dependencyCount)
+    return false;
+
+  if(lhs.correlationMaskCount != rhs.correlationMaskCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.subpassCount; ++i) {
+    if(lhs.pViewMasks[i] != rhs.pViewMasks[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.dependencyCount; ++i) {
+    if(lhs.pViewOffsets[i] != rhs.pViewOffsets[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.correlationMaskCount; ++i) {
+    if(lhs.pCorrelationMasks[i] != rhs.pCorrelationMasks[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkRenderPassMultiviewCreateInfo const &lhs,
+                VkRenderPassMultiviewCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSurfaceCapabilities2EXT const &lhs,
+                VkSurfaceCapabilities2EXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.minImageCount == rhs.minImageCount) &&
+         (lhs.maxImageCount == rhs.maxImageCount) &&
+         (lhs.currentExtent == rhs.currentExtent) &&
+         (lhs.minImageExtent == rhs.minImageExtent) &&
+         (lhs.maxImageExtent == rhs.maxImageExtent) &&
+         (lhs.maxImageArrayLayers == rhs.maxImageArrayLayers) &&
+         (lhs.supportedTransforms == rhs.supportedTransforms) &&
+         (lhs.currentTransform == rhs.currentTransform) &&
+         (lhs.supportedCompositeAlpha == rhs.supportedCompositeAlpha) &&
+         (lhs.supportedUsageFlags == rhs.supportedUsageFlags) &&
+         (lhs.supportedSurfaceCounters == rhs.supportedSurfaceCounters);
+}
+
+bool operator!=(VkSurfaceCapabilities2EXT const &lhs,
+                VkSurfaceCapabilities2EXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayPowerInfoEXT const &lhs,
+                VkDisplayPowerInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.powerState == rhs.powerState);
+}
+
+bool operator!=(VkDisplayPowerInfoEXT const &lhs,
+                VkDisplayPowerInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceEventInfoEXT const &lhs,
+                VkDeviceEventInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceEvent == rhs.deviceEvent);
+}
+
+bool operator!=(VkDeviceEventInfoEXT const &lhs,
+                VkDeviceEventInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayEventInfoEXT const &lhs,
+                VkDisplayEventInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.displayEvent == rhs.displayEvent);
+}
+
+bool operator!=(VkDisplayEventInfoEXT const &lhs,
+                VkDisplayEventInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSwapchainCounterCreateInfoEXT const &lhs,
+                VkSwapchainCounterCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.surfaceCounters == rhs.surfaceCounters);
+}
+
+bool operator!=(VkSwapchainCounterCreateInfoEXT const &lhs,
+                VkSwapchainCounterCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceGroupProperties const &lhs,
+                VkPhysicalDeviceGroupProperties const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; ++i) {
+    if(lhs.physicalDevices[i] != rhs.physicalDevices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.physicalDeviceCount == rhs.physicalDeviceCount) &&
+         (lhs.subsetAllocation == rhs.subsetAllocation);
+}
+
+bool operator!=(VkPhysicalDeviceGroupProperties const &lhs,
+                VkPhysicalDeviceGroupProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryAllocateFlagsInfo const &lhs,
+                VkMemoryAllocateFlagsInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.deviceMask == rhs.deviceMask);
+}
+
+bool operator!=(VkMemoryAllocateFlagsInfo const &lhs,
+                VkMemoryAllocateFlagsInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindBufferMemoryInfo const &lhs,
+                VkBindBufferMemoryInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.buffer == rhs.buffer) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.memoryOffset == rhs.memoryOffset);
+}
+
+bool operator!=(VkBindBufferMemoryInfo const &lhs,
+                VkBindBufferMemoryInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindBufferMemoryDeviceGroupInfo const &lhs,
+                VkBindBufferMemoryDeviceGroupInfo const &rhs) noexcept {
+  if(lhs.deviceIndexCount != rhs.deviceIndexCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.deviceIndexCount; ++i) {
+    if(lhs.pDeviceIndices[i] != rhs.pDeviceIndices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkBindBufferMemoryDeviceGroupInfo const &lhs,
+                VkBindBufferMemoryDeviceGroupInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindImageMemoryInfo const &lhs,
+                VkBindImageMemoryInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.image == rhs.image) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.memoryOffset == rhs.memoryOffset);
+}
+
+bool operator!=(VkBindImageMemoryInfo const &lhs,
+                VkBindImageMemoryInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindImageMemoryDeviceGroupInfo const &lhs,
+                VkBindImageMemoryDeviceGroupInfo const &rhs) noexcept {
+  if(lhs.deviceIndexCount != rhs.deviceIndexCount)
+    return false;
+
+  if(lhs.splitInstanceBindRegionCount != rhs.splitInstanceBindRegionCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.deviceIndexCount; ++i) {
+    if(lhs.pDeviceIndices[i] != rhs.pDeviceIndices[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.splitInstanceBindRegionCount; ++i) {
+    if(lhs.pSplitInstanceBindRegions[i] != rhs.pSplitInstanceBindRegions[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkBindImageMemoryDeviceGroupInfo const &lhs,
+                VkBindImageMemoryDeviceGroupInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceGroupRenderPassBeginInfo const &lhs,
+                VkDeviceGroupRenderPassBeginInfo const &rhs) noexcept {
+  if(lhs.deviceRenderAreaCount != rhs.deviceRenderAreaCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.deviceRenderAreaCount; ++i) {
+    if(lhs.pDeviceRenderAreas[i] != rhs.pDeviceRenderAreas[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceMask == rhs.deviceMask);
+}
+
+bool operator!=(VkDeviceGroupRenderPassBeginInfo const &lhs,
+                VkDeviceGroupRenderPassBeginInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceGroupCommandBufferBeginInfo const &lhs,
+                VkDeviceGroupCommandBufferBeginInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceMask == rhs.deviceMask);
+}
+
+bool operator!=(VkDeviceGroupCommandBufferBeginInfo const &lhs,
+                VkDeviceGroupCommandBufferBeginInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceGroupSubmitInfo const &lhs,
+                VkDeviceGroupSubmitInfo const &rhs) noexcept {
+  if(lhs.waitSemaphoreCount != rhs.waitSemaphoreCount)
+    return false;
+
+  if(lhs.commandBufferCount != rhs.commandBufferCount)
+    return false;
+
+  if(lhs.signalSemaphoreCount != rhs.signalSemaphoreCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.waitSemaphoreCount; ++i) {
+    if(lhs.pWaitSemaphoreDeviceIndices[i] != rhs.pWaitSemaphoreDeviceIndices[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.commandBufferCount; ++i) {
+    if(lhs.pCommandBufferDeviceMasks[i] != rhs.pCommandBufferDeviceMasks[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.signalSemaphoreCount; ++i) {
+    if(lhs.pSignalSemaphoreDeviceIndices[i] != rhs.pSignalSemaphoreDeviceIndices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkDeviceGroupSubmitInfo const &lhs,
+                VkDeviceGroupSubmitInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceGroupBindSparseInfo const &lhs,
+                VkDeviceGroupBindSparseInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.resourceDeviceIndex == rhs.resourceDeviceIndex) &&
+         (lhs.memoryDeviceIndex == rhs.memoryDeviceIndex);
+}
+
+bool operator!=(VkDeviceGroupBindSparseInfo const &lhs,
+                VkDeviceGroupBindSparseInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceGroupPresentCapabilitiesKHR const &lhs,
+                VkDeviceGroupPresentCapabilitiesKHR const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; ++i) {
+    if(lhs.presentMask[i] != rhs.presentMask[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.modes == rhs.modes);
+}
+
+bool operator!=(VkDeviceGroupPresentCapabilitiesKHR const &lhs,
+                VkDeviceGroupPresentCapabilitiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageSwapchainCreateInfoKHR const &lhs,
+                VkImageSwapchainCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.swapchain == rhs.swapchain);
+}
+
+bool operator!=(VkImageSwapchainCreateInfoKHR const &lhs,
+                VkImageSwapchainCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindImageMemorySwapchainInfoKHR const &lhs,
+                VkBindImageMemorySwapchainInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.swapchain == rhs.swapchain) &&
+         (lhs.imageIndex == rhs.imageIndex);
+}
+
+bool operator!=(VkBindImageMemorySwapchainInfoKHR const &lhs,
+                VkBindImageMemorySwapchainInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAcquireNextImageInfoKHR const &lhs,
+                VkAcquireNextImageInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.swapchain == rhs.swapchain) &&
+         (lhs.timeout == rhs.timeout) &&
+         (lhs.semaphore == rhs.semaphore) &&
+         (lhs.fence == rhs.fence) &&
+         (lhs.deviceMask == rhs.deviceMask);
+}
+
+bool operator!=(VkAcquireNextImageInfoKHR const &lhs,
+                VkAcquireNextImageInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceGroupPresentInfoKHR const &lhs,
+                VkDeviceGroupPresentInfoKHR const &rhs) noexcept {
+  if(lhs.swapchainCount != rhs.swapchainCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.swapchainCount; ++i) {
+    if(lhs.pDeviceMasks[i] != rhs.pDeviceMasks[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.mode == rhs.mode);
+}
+
+bool operator!=(VkDeviceGroupPresentInfoKHR const &lhs,
+                VkDeviceGroupPresentInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceGroupDeviceCreateInfo const &lhs,
+                VkDeviceGroupDeviceCreateInfo const &rhs) noexcept {
+  if(lhs.physicalDeviceCount != rhs.physicalDeviceCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.physicalDeviceCount; ++i) {
+    if(lhs.pPhysicalDevices[i] != rhs.pPhysicalDevices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkDeviceGroupDeviceCreateInfo const &lhs,
+                VkDeviceGroupDeviceCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceGroupSwapchainCreateInfoKHR const &lhs,
+                VkDeviceGroupSwapchainCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.modes == rhs.modes);
+}
+
+bool operator!=(VkDeviceGroupSwapchainCreateInfoKHR const &lhs,
+                VkDeviceGroupSwapchainCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorUpdateTemplateEntry const &lhs,
+                VkDescriptorUpdateTemplateEntry const &rhs) noexcept {
+  return (lhs.dstBinding == rhs.dstBinding) &&
+         (lhs.dstArrayElement == rhs.dstArrayElement) &&
+         (lhs.descriptorCount == rhs.descriptorCount) &&
+         (lhs.descriptorType == rhs.descriptorType) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.stride == rhs.stride);
+}
+
+bool operator!=(VkDescriptorUpdateTemplateEntry const &lhs,
+                VkDescriptorUpdateTemplateEntry const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorUpdateTemplateCreateInfo const &lhs,
+                VkDescriptorUpdateTemplateCreateInfo const &rhs) noexcept {
+  if(lhs.descriptorUpdateEntryCount != rhs.descriptorUpdateEntryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.descriptorUpdateEntryCount; ++i) {
+    if(lhs.pDescriptorUpdateEntries[i] != rhs.pDescriptorUpdateEntries[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.templateType == rhs.templateType) &&
+         (lhs.descriptorSetLayout == rhs.descriptorSetLayout) &&
+         (lhs.pipelineBindPoint == rhs.pipelineBindPoint) &&
+         (lhs.pipelineLayout == rhs.pipelineLayout) &&
+         (lhs.set == rhs.set);
+}
+
+bool operator!=(VkDescriptorUpdateTemplateCreateInfo const &lhs,
+                VkDescriptorUpdateTemplateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkXYColorEXT const &lhs,
+                VkXYColorEXT const &rhs) noexcept {
+  return (lhs.x == rhs.x) &&
+         (lhs.y == rhs.y);
+}
+
+bool operator!=(VkXYColorEXT const &lhs,
+                VkXYColorEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePresentIdFeaturesKHR const &lhs,
+                VkPhysicalDevicePresentIdFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.presentId == rhs.presentId);
+}
+
+bool operator!=(VkPhysicalDevicePresentIdFeaturesKHR const &lhs,
+                VkPhysicalDevicePresentIdFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPresentIdKHR const &lhs,
+                VkPresentIdKHR const &rhs) noexcept {
+  if(lhs.swapchainCount != rhs.swapchainCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.swapchainCount; ++i) {
+    if(lhs.pPresentIds[i] != rhs.pPresentIds[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkPresentIdKHR const &lhs,
+                VkPresentIdKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePresentWaitFeaturesKHR const &lhs,
+                VkPhysicalDevicePresentWaitFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.presentWait == rhs.presentWait);
+}
+
+bool operator!=(VkPhysicalDevicePresentWaitFeaturesKHR const &lhs,
+                VkPhysicalDevicePresentWaitFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkHdrMetadataEXT const &lhs,
+                VkHdrMetadataEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.displayPrimaryRed == rhs.displayPrimaryRed) &&
+         (lhs.displayPrimaryGreen == rhs.displayPrimaryGreen) &&
+         (lhs.displayPrimaryBlue == rhs.displayPrimaryBlue) &&
+         (lhs.whitePoint == rhs.whitePoint) &&
+         (lhs.maxLuminance == rhs.maxLuminance) &&
+         (lhs.minLuminance == rhs.minLuminance) &&
+         (lhs.maxContentLightLevel == rhs.maxContentLightLevel) &&
+         (lhs.maxFrameAverageLightLevel == rhs.maxFrameAverageLightLevel);
+}
+
+bool operator!=(VkHdrMetadataEXT const &lhs,
+                VkHdrMetadataEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayNativeHdrSurfaceCapabilitiesAMD const &lhs,
+                VkDisplayNativeHdrSurfaceCapabilitiesAMD const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.localDimmingSupport == rhs.localDimmingSupport);
+}
+
+bool operator!=(VkDisplayNativeHdrSurfaceCapabilitiesAMD const &lhs,
+                VkDisplayNativeHdrSurfaceCapabilitiesAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSwapchainDisplayNativeHdrCreateInfoAMD const &lhs,
+                VkSwapchainDisplayNativeHdrCreateInfoAMD const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.localDimmingEnable == rhs.localDimmingEnable);
+}
+
+bool operator!=(VkSwapchainDisplayNativeHdrCreateInfoAMD const &lhs,
+                VkSwapchainDisplayNativeHdrCreateInfoAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRefreshCycleDurationGOOGLE const &lhs,
+                VkRefreshCycleDurationGOOGLE const &rhs) noexcept {
+  return (lhs.refreshDuration == rhs.refreshDuration);
+}
+
+bool operator!=(VkRefreshCycleDurationGOOGLE const &lhs,
+                VkRefreshCycleDurationGOOGLE const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPastPresentationTimingGOOGLE const &lhs,
+                VkPastPresentationTimingGOOGLE const &rhs) noexcept {
+  return (lhs.presentID == rhs.presentID) &&
+         (lhs.desiredPresentTime == rhs.desiredPresentTime) &&
+         (lhs.actualPresentTime == rhs.actualPresentTime) &&
+         (lhs.earliestPresentTime == rhs.earliestPresentTime) &&
+         (lhs.presentMargin == rhs.presentMargin);
+}
+
+bool operator!=(VkPastPresentationTimingGOOGLE const &lhs,
+                VkPastPresentationTimingGOOGLE const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPresentTimesInfoGOOGLE const &lhs,
+                VkPresentTimesInfoGOOGLE const &rhs) noexcept {
+  if(lhs.swapchainCount != rhs.swapchainCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.swapchainCount; ++i) {
+    if(lhs.pTimes[i] != rhs.pTimes[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkPresentTimesInfoGOOGLE const &lhs,
+                VkPresentTimesInfoGOOGLE const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPresentTimeGOOGLE const &lhs,
+                VkPresentTimeGOOGLE const &rhs) noexcept {
+  return (lhs.presentID == rhs.presentID) &&
+         (lhs.desiredPresentTime == rhs.desiredPresentTime);
+}
+
+bool operator!=(VkPresentTimeGOOGLE const &lhs,
+                VkPresentTimeGOOGLE const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_IOS_MVK
+bool operator==(VkIOSSurfaceCreateInfoMVK const &lhs,
+                VkIOSSurfaceCreateInfoMVK const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pView == rhs.pView);
+}
+
+bool operator!=(VkIOSSurfaceCreateInfoMVK const &lhs,
+                VkIOSSurfaceCreateInfoMVK const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_IOS_MVK
+
+#ifdef VK_USE_PLATFORM_MACOS_MVK
+bool operator==(VkMacOSSurfaceCreateInfoMVK const &lhs,
+                VkMacOSSurfaceCreateInfoMVK const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pView == rhs.pView);
+}
+
+bool operator!=(VkMacOSSurfaceCreateInfoMVK const &lhs,
+                VkMacOSSurfaceCreateInfoMVK const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_MACOS_MVK
+
+#ifdef VK_USE_PLATFORM_METAL_EXT
+bool operator==(VkMetalSurfaceCreateInfoEXT const &lhs,
+                VkMetalSurfaceCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pLayer == rhs.pLayer);
+}
+
+bool operator!=(VkMetalSurfaceCreateInfoEXT const &lhs,
+                VkMetalSurfaceCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_METAL_EXT
+
+bool operator==(VkViewportWScalingNV const &lhs,
+                VkViewportWScalingNV const &rhs) noexcept {
+  return (lhs.xcoeff == rhs.xcoeff) &&
+         (lhs.ycoeff == rhs.ycoeff);
+}
+
+bool operator!=(VkViewportWScalingNV const &lhs,
+                VkViewportWScalingNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineViewportWScalingStateCreateInfoNV const &lhs,
+                VkPipelineViewportWScalingStateCreateInfoNV const &rhs) noexcept {
+  if(lhs.viewportCount != rhs.viewportCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.viewportCount; ++i) {
+    if(lhs.pViewportWScalings[i] != rhs.pViewportWScalings[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.viewportWScalingEnable == rhs.viewportWScalingEnable);
+}
+
+bool operator!=(VkPipelineViewportWScalingStateCreateInfoNV const &lhs,
+                VkPipelineViewportWScalingStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkViewportSwizzleNV const &lhs,
+                VkViewportSwizzleNV const &rhs) noexcept {
+  return (lhs.x == rhs.x) &&
+         (lhs.y == rhs.y) &&
+         (lhs.z == rhs.z) &&
+         (lhs.w == rhs.w);
+}
+
+bool operator!=(VkViewportSwizzleNV const &lhs,
+                VkViewportSwizzleNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineViewportSwizzleStateCreateInfoNV const &lhs,
+                VkPipelineViewportSwizzleStateCreateInfoNV const &rhs) noexcept {
+  if(lhs.viewportCount != rhs.viewportCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.viewportCount; ++i) {
+    if(lhs.pViewportSwizzles[i] != rhs.pViewportSwizzles[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkPipelineViewportSwizzleStateCreateInfoNV const &lhs,
+                VkPipelineViewportSwizzleStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDiscardRectanglePropertiesEXT const &lhs,
+                VkPhysicalDeviceDiscardRectanglePropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxDiscardRectangles == rhs.maxDiscardRectangles);
+}
+
+bool operator!=(VkPhysicalDeviceDiscardRectanglePropertiesEXT const &lhs,
+                VkPhysicalDeviceDiscardRectanglePropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineDiscardRectangleStateCreateInfoEXT const &lhs,
+                VkPipelineDiscardRectangleStateCreateInfoEXT const &rhs) noexcept {
+  if(lhs.discardRectangleCount != rhs.discardRectangleCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.discardRectangleCount; ++i) {
+    if(lhs.pDiscardRectangles[i] != rhs.pDiscardRectangles[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.discardRectangleMode == rhs.discardRectangleMode);
+}
+
+bool operator!=(VkPipelineDiscardRectangleStateCreateInfoEXT const &lhs,
+                VkPipelineDiscardRectangleStateCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &lhs,
+                VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.perViewPositionAllComponents == rhs.perViewPositionAllComponents);
+}
+
+bool operator!=(VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &lhs,
+                VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkInputAttachmentAspectReference const &lhs,
+                VkInputAttachmentAspectReference const &rhs) noexcept {
+  return (lhs.subpass == rhs.subpass) &&
+         (lhs.inputAttachmentIndex == rhs.inputAttachmentIndex) &&
+         (lhs.aspectMask == rhs.aspectMask);
+}
+
+bool operator!=(VkInputAttachmentAspectReference const &lhs,
+                VkInputAttachmentAspectReference const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderPassInputAttachmentAspectCreateInfo const &lhs,
+                VkRenderPassInputAttachmentAspectCreateInfo const &rhs) noexcept {
+  if(lhs.aspectReferenceCount != rhs.aspectReferenceCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.aspectReferenceCount; ++i) {
+    if(lhs.pAspectReferences[i] != rhs.pAspectReferences[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkRenderPassInputAttachmentAspectCreateInfo const &lhs,
+                VkRenderPassInputAttachmentAspectCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSurfaceInfo2KHR const &lhs,
+                VkPhysicalDeviceSurfaceInfo2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.surface == rhs.surface);
+}
+
+bool operator!=(VkPhysicalDeviceSurfaceInfo2KHR const &lhs,
+                VkPhysicalDeviceSurfaceInfo2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSurfaceCapabilities2KHR const &lhs,
+                VkSurfaceCapabilities2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.surfaceCapabilities == rhs.surfaceCapabilities);
+}
+
+bool operator!=(VkSurfaceCapabilities2KHR const &lhs,
+                VkSurfaceCapabilities2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSurfaceFormat2KHR const &lhs,
+                VkSurfaceFormat2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.surfaceFormat == rhs.surfaceFormat);
+}
+
+bool operator!=(VkSurfaceFormat2KHR const &lhs,
+                VkSurfaceFormat2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayProperties2KHR const &lhs,
+                VkDisplayProperties2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.displayProperties == rhs.displayProperties);
+}
+
+bool operator!=(VkDisplayProperties2KHR const &lhs,
+                VkDisplayProperties2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayPlaneProperties2KHR const &lhs,
+                VkDisplayPlaneProperties2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.displayPlaneProperties == rhs.displayPlaneProperties);
+}
+
+bool operator!=(VkDisplayPlaneProperties2KHR const &lhs,
+                VkDisplayPlaneProperties2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayModeProperties2KHR const &lhs,
+                VkDisplayModeProperties2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.displayModeProperties == rhs.displayModeProperties);
+}
+
+bool operator!=(VkDisplayModeProperties2KHR const &lhs,
+                VkDisplayModeProperties2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayPlaneInfo2KHR const &lhs,
+                VkDisplayPlaneInfo2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.mode == rhs.mode) &&
+         (lhs.planeIndex == rhs.planeIndex);
+}
+
+bool operator!=(VkDisplayPlaneInfo2KHR const &lhs,
+                VkDisplayPlaneInfo2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDisplayPlaneCapabilities2KHR const &lhs,
+                VkDisplayPlaneCapabilities2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.capabilities == rhs.capabilities);
+}
+
+bool operator!=(VkDisplayPlaneCapabilities2KHR const &lhs,
+                VkDisplayPlaneCapabilities2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSharedPresentSurfaceCapabilitiesKHR const &lhs,
+                VkSharedPresentSurfaceCapabilitiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.sharedPresentSupportedUsageFlags == rhs.sharedPresentSupportedUsageFlags);
+}
+
+bool operator!=(VkSharedPresentSurfaceCapabilitiesKHR const &lhs,
+                VkSharedPresentSurfaceCapabilitiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevice16BitStorageFeatures const &lhs,
+                VkPhysicalDevice16BitStorageFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.storageBuffer16BitAccess == rhs.storageBuffer16BitAccess) &&
+         (lhs.uniformAndStorageBuffer16BitAccess == rhs.uniformAndStorageBuffer16BitAccess) &&
+         (lhs.storagePushConstant16 == rhs.storagePushConstant16) &&
+         (lhs.storageInputOutput16 == rhs.storageInputOutput16);
+}
+
+bool operator!=(VkPhysicalDevice16BitStorageFeatures const &lhs,
+                VkPhysicalDevice16BitStorageFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSubgroupProperties const &lhs,
+                VkPhysicalDeviceSubgroupProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.subgroupSize == rhs.subgroupSize) &&
+         (lhs.supportedStages == rhs.supportedStages) &&
+         (lhs.supportedOperations == rhs.supportedOperations) &&
+         (lhs.quadOperationsInAllStages == rhs.quadOperationsInAllStages);
+}
+
+bool operator!=(VkPhysicalDeviceSubgroupProperties const &lhs,
+                VkPhysicalDeviceSubgroupProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &lhs,
+                VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderSubgroupExtendedTypes == rhs.shaderSubgroupExtendedTypes);
+}
+
+bool operator!=(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &lhs,
+                VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferMemoryRequirementsInfo2 const &lhs,
+                VkBufferMemoryRequirementsInfo2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.buffer == rhs.buffer);
+}
+
+bool operator!=(VkBufferMemoryRequirementsInfo2 const &lhs,
+                VkBufferMemoryRequirementsInfo2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceBufferMemoryRequirementsKHR const &lhs,
+                VkDeviceBufferMemoryRequirementsKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pCreateInfo == rhs.pCreateInfo);
+}
+
+bool operator!=(VkDeviceBufferMemoryRequirementsKHR const &lhs,
+                VkDeviceBufferMemoryRequirementsKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageMemoryRequirementsInfo2 const &lhs,
+                VkImageMemoryRequirementsInfo2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.image == rhs.image);
+}
+
+bool operator!=(VkImageMemoryRequirementsInfo2 const &lhs,
+                VkImageMemoryRequirementsInfo2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageSparseMemoryRequirementsInfo2 const &lhs,
+                VkImageSparseMemoryRequirementsInfo2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.image == rhs.image);
+}
+
+bool operator!=(VkImageSparseMemoryRequirementsInfo2 const &lhs,
+                VkImageSparseMemoryRequirementsInfo2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceImageMemoryRequirementsKHR const &lhs,
+                VkDeviceImageMemoryRequirementsKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pCreateInfo == rhs.pCreateInfo) &&
+         (lhs.planeAspect == rhs.planeAspect);
+}
+
+bool operator!=(VkDeviceImageMemoryRequirementsKHR const &lhs,
+                VkDeviceImageMemoryRequirementsKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryRequirements2 const &lhs,
+                VkMemoryRequirements2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryRequirements == rhs.memoryRequirements);
+}
+
+bool operator!=(VkMemoryRequirements2 const &lhs,
+                VkMemoryRequirements2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSparseImageMemoryRequirements2 const &lhs,
+                VkSparseImageMemoryRequirements2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryRequirements == rhs.memoryRequirements);
+}
+
+bool operator!=(VkSparseImageMemoryRequirements2 const &lhs,
+                VkSparseImageMemoryRequirements2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePointClippingProperties const &lhs,
+                VkPhysicalDevicePointClippingProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pointClippingBehavior == rhs.pointClippingBehavior);
+}
+
+bool operator!=(VkPhysicalDevicePointClippingProperties const &lhs,
+                VkPhysicalDevicePointClippingProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryDedicatedRequirements const &lhs,
+                VkMemoryDedicatedRequirements const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.prefersDedicatedAllocation == rhs.prefersDedicatedAllocation) &&
+         (lhs.requiresDedicatedAllocation == rhs.requiresDedicatedAllocation);
+}
+
+bool operator!=(VkMemoryDedicatedRequirements const &lhs,
+                VkMemoryDedicatedRequirements const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryDedicatedAllocateInfo const &lhs,
+                VkMemoryDedicatedAllocateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.image == rhs.image) &&
+         (lhs.buffer == rhs.buffer);
+}
+
+bool operator!=(VkMemoryDedicatedAllocateInfo const &lhs,
+                VkMemoryDedicatedAllocateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageViewUsageCreateInfo const &lhs,
+                VkImageViewUsageCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.usage == rhs.usage);
+}
+
+bool operator!=(VkImageViewUsageCreateInfo const &lhs,
+                VkImageViewUsageCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineTessellationDomainOriginStateCreateInfo const &lhs,
+                VkPipelineTessellationDomainOriginStateCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.domainOrigin == rhs.domainOrigin);
+}
+
+bool operator!=(VkPipelineTessellationDomainOriginStateCreateInfo const &lhs,
+                VkPipelineTessellationDomainOriginStateCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSamplerYcbcrConversionInfo const &lhs,
+                VkSamplerYcbcrConversionInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.conversion == rhs.conversion);
+}
+
+bool operator!=(VkSamplerYcbcrConversionInfo const &lhs,
+                VkSamplerYcbcrConversionInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSamplerYcbcrConversionCreateInfo const &lhs,
+                VkSamplerYcbcrConversionCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.format == rhs.format) &&
+         (lhs.ycbcrModel == rhs.ycbcrModel) &&
+         (lhs.ycbcrRange == rhs.ycbcrRange) &&
+         (lhs.components == rhs.components) &&
+         (lhs.xChromaOffset == rhs.xChromaOffset) &&
+         (lhs.yChromaOffset == rhs.yChromaOffset) &&
+         (lhs.chromaFilter == rhs.chromaFilter) &&
+         (lhs.forceExplicitReconstruction == rhs.forceExplicitReconstruction);
+}
+
+bool operator!=(VkSamplerYcbcrConversionCreateInfo const &lhs,
+                VkSamplerYcbcrConversionCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindImagePlaneMemoryInfo const &lhs,
+                VkBindImagePlaneMemoryInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.planeAspect == rhs.planeAspect);
+}
+
+bool operator!=(VkBindImagePlaneMemoryInfo const &lhs,
+                VkBindImagePlaneMemoryInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImagePlaneMemoryRequirementsInfo const &lhs,
+                VkImagePlaneMemoryRequirementsInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.planeAspect == rhs.planeAspect);
+}
+
+bool operator!=(VkImagePlaneMemoryRequirementsInfo const &lhs,
+                VkImagePlaneMemoryRequirementsInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSamplerYcbcrConversionFeatures const &lhs,
+                VkPhysicalDeviceSamplerYcbcrConversionFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.samplerYcbcrConversion == rhs.samplerYcbcrConversion);
+}
+
+bool operator!=(VkPhysicalDeviceSamplerYcbcrConversionFeatures const &lhs,
+                VkPhysicalDeviceSamplerYcbcrConversionFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSamplerYcbcrConversionImageFormatProperties const &lhs,
+                VkSamplerYcbcrConversionImageFormatProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.combinedImageSamplerDescriptorCount == rhs.combinedImageSamplerDescriptorCount);
+}
+
+bool operator!=(VkSamplerYcbcrConversionImageFormatProperties const &lhs,
+                VkSamplerYcbcrConversionImageFormatProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkTextureLODGatherFormatPropertiesAMD const &lhs,
+                VkTextureLODGatherFormatPropertiesAMD const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.supportsTextureGatherLODBiasAMD == rhs.supportsTextureGatherLODBiasAMD);
+}
+
+bool operator!=(VkTextureLODGatherFormatPropertiesAMD const &lhs,
+                VkTextureLODGatherFormatPropertiesAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkConditionalRenderingBeginInfoEXT const &lhs,
+                VkConditionalRenderingBeginInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.buffer == rhs.buffer) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkConditionalRenderingBeginInfoEXT const &lhs,
+                VkConditionalRenderingBeginInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkProtectedSubmitInfo const &lhs,
+                VkProtectedSubmitInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.protectedSubmit == rhs.protectedSubmit);
+}
+
+bool operator!=(VkProtectedSubmitInfo const &lhs,
+                VkProtectedSubmitInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceProtectedMemoryFeatures const &lhs,
+                VkPhysicalDeviceProtectedMemoryFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.protectedMemory == rhs.protectedMemory);
+}
+
+bool operator!=(VkPhysicalDeviceProtectedMemoryFeatures const &lhs,
+                VkPhysicalDeviceProtectedMemoryFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceProtectedMemoryProperties const &lhs,
+                VkPhysicalDeviceProtectedMemoryProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.protectedNoFault == rhs.protectedNoFault);
+}
+
+bool operator!=(VkPhysicalDeviceProtectedMemoryProperties const &lhs,
+                VkPhysicalDeviceProtectedMemoryProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceQueueInfo2 const &lhs,
+                VkDeviceQueueInfo2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.queueFamilyIndex == rhs.queueFamilyIndex) &&
+         (lhs.queueIndex == rhs.queueIndex);
+}
+
+bool operator!=(VkDeviceQueueInfo2 const &lhs,
+                VkDeviceQueueInfo2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineCoverageToColorStateCreateInfoNV const &lhs,
+                VkPipelineCoverageToColorStateCreateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.coverageToColorEnable == rhs.coverageToColorEnable) &&
+         (lhs.coverageToColorLocation == rhs.coverageToColorLocation);
+}
+
+bool operator!=(VkPipelineCoverageToColorStateCreateInfoNV const &lhs,
+                VkPipelineCoverageToColorStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSamplerFilterMinmaxProperties const &lhs,
+                VkPhysicalDeviceSamplerFilterMinmaxProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.filterMinmaxSingleComponentFormats == rhs.filterMinmaxSingleComponentFormats) &&
+         (lhs.filterMinmaxImageComponentMapping == rhs.filterMinmaxImageComponentMapping);
+}
+
+bool operator!=(VkPhysicalDeviceSamplerFilterMinmaxProperties const &lhs,
+                VkPhysicalDeviceSamplerFilterMinmaxProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSampleLocationEXT const &lhs,
+                VkSampleLocationEXT const &rhs) noexcept {
+  return (lhs.x == rhs.x) &&
+         (lhs.y == rhs.y);
+}
+
+bool operator!=(VkSampleLocationEXT const &lhs,
+                VkSampleLocationEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSampleLocationsInfoEXT const &lhs,
+                VkSampleLocationsInfoEXT const &rhs) noexcept {
+  if(lhs.sampleLocationsCount != rhs.sampleLocationsCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.sampleLocationsCount; ++i) {
+    if(lhs.pSampleLocations[i] != rhs.pSampleLocations[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.sampleLocationsPerPixel == rhs.sampleLocationsPerPixel) &&
+         (lhs.sampleLocationGridSize == rhs.sampleLocationGridSize);
+}
+
+bool operator!=(VkSampleLocationsInfoEXT const &lhs,
+                VkSampleLocationsInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAttachmentSampleLocationsEXT const &lhs,
+                VkAttachmentSampleLocationsEXT const &rhs) noexcept {
+  return (lhs.attachmentIndex == rhs.attachmentIndex) &&
+         (lhs.sampleLocationsInfo == rhs.sampleLocationsInfo);
+}
+
+bool operator!=(VkAttachmentSampleLocationsEXT const &lhs,
+                VkAttachmentSampleLocationsEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubpassSampleLocationsEXT const &lhs,
+                VkSubpassSampleLocationsEXT const &rhs) noexcept {
+  return (lhs.subpassIndex == rhs.subpassIndex) &&
+         (lhs.sampleLocationsInfo == rhs.sampleLocationsInfo);
+}
+
+bool operator!=(VkSubpassSampleLocationsEXT const &lhs,
+                VkSubpassSampleLocationsEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderPassSampleLocationsBeginInfoEXT const &lhs,
+                VkRenderPassSampleLocationsBeginInfoEXT const &rhs) noexcept {
+  if(lhs.attachmentInitialSampleLocationsCount != rhs.attachmentInitialSampleLocationsCount)
+    return false;
+
+  if(lhs.postSubpassSampleLocationsCount != rhs.postSubpassSampleLocationsCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.attachmentInitialSampleLocationsCount; ++i) {
+    if(lhs.pAttachmentInitialSampleLocations[i] != rhs.pAttachmentInitialSampleLocations[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.postSubpassSampleLocationsCount; ++i) {
+    if(lhs.pPostSubpassSampleLocations[i] != rhs.pPostSubpassSampleLocations[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkRenderPassSampleLocationsBeginInfoEXT const &lhs,
+                VkRenderPassSampleLocationsBeginInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineSampleLocationsStateCreateInfoEXT const &lhs,
+                VkPipelineSampleLocationsStateCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.sampleLocationsEnable == rhs.sampleLocationsEnable) &&
+         (lhs.sampleLocationsInfo == rhs.sampleLocationsInfo);
+}
+
+bool operator!=(VkPipelineSampleLocationsStateCreateInfoEXT const &lhs,
+                VkPipelineSampleLocationsStateCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSampleLocationsPropertiesEXT const &lhs,
+                VkPhysicalDeviceSampleLocationsPropertiesEXT const &rhs) noexcept {
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.sampleLocationCoordinateRange[i] != rhs.sampleLocationCoordinateRange[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.sampleLocationSampleCounts == rhs.sampleLocationSampleCounts) &&
+         (lhs.maxSampleLocationGridSize == rhs.maxSampleLocationGridSize) &&
+         (lhs.sampleLocationSubPixelBits == rhs.sampleLocationSubPixelBits) &&
+         (lhs.variableSampleLocations == rhs.variableSampleLocations);
+}
+
+bool operator!=(VkPhysicalDeviceSampleLocationsPropertiesEXT const &lhs,
+                VkPhysicalDeviceSampleLocationsPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMultisamplePropertiesEXT const &lhs,
+                VkMultisamplePropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxSampleLocationGridSize == rhs.maxSampleLocationGridSize);
+}
+
+bool operator!=(VkMultisamplePropertiesEXT const &lhs,
+                VkMultisamplePropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSamplerReductionModeCreateInfo const &lhs,
+                VkSamplerReductionModeCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.reductionMode == rhs.reductionMode);
+}
+
+bool operator!=(VkSamplerReductionModeCreateInfo const &lhs,
+                VkSamplerReductionModeCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &lhs,
+                VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.advancedBlendCoherentOperations == rhs.advancedBlendCoherentOperations);
+}
+
+bool operator!=(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &lhs,
+                VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMultiDrawFeaturesEXT const &lhs,
+                VkPhysicalDeviceMultiDrawFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.multiDraw == rhs.multiDraw);
+}
+
+bool operator!=(VkPhysicalDeviceMultiDrawFeaturesEXT const &lhs,
+                VkPhysicalDeviceMultiDrawFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &lhs,
+                VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.advancedBlendMaxColorAttachments == rhs.advancedBlendMaxColorAttachments) &&
+         (lhs.advancedBlendIndependentBlend == rhs.advancedBlendIndependentBlend) &&
+         (lhs.advancedBlendNonPremultipliedSrcColor == rhs.advancedBlendNonPremultipliedSrcColor) &&
+         (lhs.advancedBlendNonPremultipliedDstColor == rhs.advancedBlendNonPremultipliedDstColor) &&
+         (lhs.advancedBlendCorrelatedOverlap == rhs.advancedBlendCorrelatedOverlap) &&
+         (lhs.advancedBlendAllOperations == rhs.advancedBlendAllOperations);
+}
+
+bool operator!=(VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &lhs,
+                VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineColorBlendAdvancedStateCreateInfoEXT const &lhs,
+                VkPipelineColorBlendAdvancedStateCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcPremultiplied == rhs.srcPremultiplied) &&
+         (lhs.dstPremultiplied == rhs.dstPremultiplied) &&
+         (lhs.blendOverlap == rhs.blendOverlap);
+}
+
+bool operator!=(VkPipelineColorBlendAdvancedStateCreateInfoEXT const &lhs,
+                VkPipelineColorBlendAdvancedStateCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceInlineUniformBlockFeaturesEXT const &lhs,
+                VkPhysicalDeviceInlineUniformBlockFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.inlineUniformBlock == rhs.inlineUniformBlock) &&
+         (lhs.descriptorBindingInlineUniformBlockUpdateAfterBind == rhs.descriptorBindingInlineUniformBlockUpdateAfterBind);
+}
+
+bool operator!=(VkPhysicalDeviceInlineUniformBlockFeaturesEXT const &lhs,
+                VkPhysicalDeviceInlineUniformBlockFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceInlineUniformBlockPropertiesEXT const &lhs,
+                VkPhysicalDeviceInlineUniformBlockPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxInlineUniformBlockSize == rhs.maxInlineUniformBlockSize) &&
+         (lhs.maxPerStageDescriptorInlineUniformBlocks == rhs.maxPerStageDescriptorInlineUniformBlocks) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks == rhs.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks) &&
+         (lhs.maxDescriptorSetInlineUniformBlocks == rhs.maxDescriptorSetInlineUniformBlocks) &&
+         (lhs.maxDescriptorSetUpdateAfterBindInlineUniformBlocks == rhs.maxDescriptorSetUpdateAfterBindInlineUniformBlocks);
+}
+
+bool operator!=(VkPhysicalDeviceInlineUniformBlockPropertiesEXT const &lhs,
+                VkPhysicalDeviceInlineUniformBlockPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkWriteDescriptorSetInlineUniformBlockEXT const &lhs,
+                VkWriteDescriptorSetInlineUniformBlockEXT const &rhs) noexcept {
+  if(lhs.dataSize != rhs.dataSize)
+    return false;
+
+  if(memcmp(lhs.pData, rhs.pData, lhs.dataSize) != 0)
+    return false;
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkWriteDescriptorSetInlineUniformBlockEXT const &lhs,
+                VkWriteDescriptorSetInlineUniformBlockEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorPoolInlineUniformBlockCreateInfoEXT const &lhs,
+                VkDescriptorPoolInlineUniformBlockCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxInlineUniformBlockBindings == rhs.maxInlineUniformBlockBindings);
+}
+
+bool operator!=(VkDescriptorPoolInlineUniformBlockCreateInfoEXT const &lhs,
+                VkDescriptorPoolInlineUniformBlockCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineCoverageModulationStateCreateInfoNV const &lhs,
+                VkPipelineCoverageModulationStateCreateInfoNV const &rhs) noexcept {
+  if(lhs.coverageModulationTableCount != rhs.coverageModulationTableCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.coverageModulationTableCount; ++i) {
+    if(lhs.pCoverageModulationTable[i] != rhs.pCoverageModulationTable[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.coverageModulationMode == rhs.coverageModulationMode) &&
+         (lhs.coverageModulationTableEnable == rhs.coverageModulationTableEnable);
+}
+
+bool operator!=(VkPipelineCoverageModulationStateCreateInfoNV const &lhs,
+                VkPipelineCoverageModulationStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageFormatListCreateInfo const &lhs,
+                VkImageFormatListCreateInfo const &rhs) noexcept {
+  if(lhs.viewFormatCount != rhs.viewFormatCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.viewFormatCount; ++i) {
+    if(lhs.pViewFormats[i] != rhs.pViewFormats[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkImageFormatListCreateInfo const &lhs,
+                VkImageFormatListCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkValidationCacheCreateInfoEXT const &lhs,
+                VkValidationCacheCreateInfoEXT const &rhs) noexcept {
+  if(lhs.initialDataSize != rhs.initialDataSize)
+    return false;
+
+  if(memcmp(lhs.pInitialData, rhs.pInitialData, lhs.initialDataSize) != 0)
+    return false;
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkValidationCacheCreateInfoEXT const &lhs,
+                VkValidationCacheCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkShaderModuleValidationCacheCreateInfoEXT const &lhs,
+                VkShaderModuleValidationCacheCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.validationCache == rhs.validationCache);
+}
+
+bool operator!=(VkShaderModuleValidationCacheCreateInfoEXT const &lhs,
+                VkShaderModuleValidationCacheCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMaintenance3Properties const &lhs,
+                VkPhysicalDeviceMaintenance3Properties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxPerSetDescriptors == rhs.maxPerSetDescriptors) &&
+         (lhs.maxMemoryAllocationSize == rhs.maxMemoryAllocationSize);
+}
+
+bool operator!=(VkPhysicalDeviceMaintenance3Properties const &lhs,
+                VkPhysicalDeviceMaintenance3Properties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMaintenance4FeaturesKHR const &lhs,
+                VkPhysicalDeviceMaintenance4FeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maintenance4 == rhs.maintenance4);
+}
+
+bool operator!=(VkPhysicalDeviceMaintenance4FeaturesKHR const &lhs,
+                VkPhysicalDeviceMaintenance4FeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMaintenance4PropertiesKHR const &lhs,
+                VkPhysicalDeviceMaintenance4PropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxBufferSize == rhs.maxBufferSize);
+}
+
+bool operator!=(VkPhysicalDeviceMaintenance4PropertiesKHR const &lhs,
+                VkPhysicalDeviceMaintenance4PropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorSetLayoutSupport const &lhs,
+                VkDescriptorSetLayoutSupport const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.supported == rhs.supported);
+}
+
+bool operator!=(VkDescriptorSetLayoutSupport const &lhs,
+                VkDescriptorSetLayoutSupport const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderDrawParametersFeatures const &lhs,
+                VkPhysicalDeviceShaderDrawParametersFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderDrawParameters == rhs.shaderDrawParameters);
+}
+
+bool operator!=(VkPhysicalDeviceShaderDrawParametersFeatures const &lhs,
+                VkPhysicalDeviceShaderDrawParametersFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderFloat16Int8Features const &lhs,
+                VkPhysicalDeviceShaderFloat16Int8Features const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderFloat16 == rhs.shaderFloat16) &&
+         (lhs.shaderInt8 == rhs.shaderInt8);
+}
+
+bool operator!=(VkPhysicalDeviceShaderFloat16Int8Features const &lhs,
+                VkPhysicalDeviceShaderFloat16Int8Features const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFloatControlsProperties const &lhs,
+                VkPhysicalDeviceFloatControlsProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.denormBehaviorIndependence == rhs.denormBehaviorIndependence) &&
+         (lhs.roundingModeIndependence == rhs.roundingModeIndependence) &&
+         (lhs.shaderSignedZeroInfNanPreserveFloat16 == rhs.shaderSignedZeroInfNanPreserveFloat16) &&
+         (lhs.shaderSignedZeroInfNanPreserveFloat32 == rhs.shaderSignedZeroInfNanPreserveFloat32) &&
+         (lhs.shaderSignedZeroInfNanPreserveFloat64 == rhs.shaderSignedZeroInfNanPreserveFloat64) &&
+         (lhs.shaderDenormPreserveFloat16 == rhs.shaderDenormPreserveFloat16) &&
+         (lhs.shaderDenormPreserveFloat32 == rhs.shaderDenormPreserveFloat32) &&
+         (lhs.shaderDenormPreserveFloat64 == rhs.shaderDenormPreserveFloat64) &&
+         (lhs.shaderDenormFlushToZeroFloat16 == rhs.shaderDenormFlushToZeroFloat16) &&
+         (lhs.shaderDenormFlushToZeroFloat32 == rhs.shaderDenormFlushToZeroFloat32) &&
+         (lhs.shaderDenormFlushToZeroFloat64 == rhs.shaderDenormFlushToZeroFloat64) &&
+         (lhs.shaderRoundingModeRTEFloat16 == rhs.shaderRoundingModeRTEFloat16) &&
+         (lhs.shaderRoundingModeRTEFloat32 == rhs.shaderRoundingModeRTEFloat32) &&
+         (lhs.shaderRoundingModeRTEFloat64 == rhs.shaderRoundingModeRTEFloat64) &&
+         (lhs.shaderRoundingModeRTZFloat16 == rhs.shaderRoundingModeRTZFloat16) &&
+         (lhs.shaderRoundingModeRTZFloat32 == rhs.shaderRoundingModeRTZFloat32) &&
+         (lhs.shaderRoundingModeRTZFloat64 == rhs.shaderRoundingModeRTZFloat64);
+}
+
+bool operator!=(VkPhysicalDeviceFloatControlsProperties const &lhs,
+                VkPhysicalDeviceFloatControlsProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceHostQueryResetFeatures const &lhs,
+                VkPhysicalDeviceHostQueryResetFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.hostQueryReset == rhs.hostQueryReset);
+}
+
+bool operator!=(VkPhysicalDeviceHostQueryResetFeatures const &lhs,
+                VkPhysicalDeviceHostQueryResetFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkNativeBufferUsage2ANDROID const &lhs,
+                VkNativeBufferUsage2ANDROID const &rhs) noexcept {
+  return (lhs.consumer == rhs.consumer) &&
+         (lhs.producer == rhs.producer);
+}
+
+bool operator!=(VkNativeBufferUsage2ANDROID const &lhs,
+                VkNativeBufferUsage2ANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkNativeBufferANDROID const &lhs,
+                VkNativeBufferANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handle == rhs.handle) &&
+         (lhs.stride == rhs.stride) &&
+         (lhs.format == rhs.format) &&
+         (lhs.usage == rhs.usage) &&
+         (lhs.usage2 == rhs.usage2);
+}
+
+bool operator!=(VkNativeBufferANDROID const &lhs,
+                VkNativeBufferANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkSwapchainImageCreateInfoANDROID const &lhs,
+                VkSwapchainImageCreateInfoANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.usage == rhs.usage);
+}
+
+bool operator!=(VkSwapchainImageCreateInfoANDROID const &lhs,
+                VkSwapchainImageCreateInfoANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkPhysicalDevicePresentationPropertiesANDROID const &lhs,
+                VkPhysicalDevicePresentationPropertiesANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.sharedImage == rhs.sharedImage);
+}
+
+bool operator!=(VkPhysicalDevicePresentationPropertiesANDROID const &lhs,
+                VkPhysicalDevicePresentationPropertiesANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+bool operator==(VkShaderResourceUsageAMD const &lhs,
+                VkShaderResourceUsageAMD const &rhs) noexcept {
+  return (lhs.numUsedVgprs == rhs.numUsedVgprs) &&
+         (lhs.numUsedSgprs == rhs.numUsedSgprs) &&
+         (lhs.ldsSizePerLocalWorkGroup == rhs.ldsSizePerLocalWorkGroup) &&
+         (lhs.ldsUsageSizeInBytes == rhs.ldsUsageSizeInBytes) &&
+         (lhs.scratchMemUsageInBytes == rhs.scratchMemUsageInBytes);
+}
+
+bool operator!=(VkShaderResourceUsageAMD const &lhs,
+                VkShaderResourceUsageAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkShaderStatisticsInfoAMD const &lhs,
+                VkShaderStatisticsInfoAMD const &rhs) noexcept {
+  for(uint32_t i = 0; i < 3; ++i) {
+    if(lhs.computeWorkGroupSize[i] != rhs.computeWorkGroupSize[i])
+      return false;
+  }
+
+  return (lhs.shaderStageMask == rhs.shaderStageMask) &&
+         (lhs.resourceUsage == rhs.resourceUsage) &&
+         (lhs.numPhysicalVgprs == rhs.numPhysicalVgprs) &&
+         (lhs.numPhysicalSgprs == rhs.numPhysicalSgprs) &&
+         (lhs.numAvailableVgprs == rhs.numAvailableVgprs) &&
+         (lhs.numAvailableSgprs == rhs.numAvailableSgprs);
+}
+
+bool operator!=(VkShaderStatisticsInfoAMD const &lhs,
+                VkShaderStatisticsInfoAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceQueueGlobalPriorityCreateInfoEXT const &lhs,
+                VkDeviceQueueGlobalPriorityCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.globalPriority == rhs.globalPriority);
+}
+
+bool operator!=(VkDeviceQueueGlobalPriorityCreateInfoEXT const &lhs,
+                VkDeviceQueueGlobalPriorityCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const &lhs,
+                VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.globalPriorityQuery == rhs.globalPriorityQuery);
+}
+
+bool operator!=(VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const &lhs,
+                VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkQueueFamilyGlobalPriorityPropertiesEXT const &lhs,
+                VkQueueFamilyGlobalPriorityPropertiesEXT const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_GLOBAL_PRIORITY_SIZE_EXT; ++i) {
+    if(lhs.priorities[i] != rhs.priorities[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.priorityCount == rhs.priorityCount);
+}
+
+bool operator!=(VkQueueFamilyGlobalPriorityPropertiesEXT const &lhs,
+                VkQueueFamilyGlobalPriorityPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDebugUtilsObjectNameInfoEXT const &lhs,
+                VkDebugUtilsObjectNameInfoEXT const &rhs) noexcept {
+  if (lhs.pObjectName != rhs.pObjectName) {
+    if(lhs.pObjectName == nullptr || rhs.pObjectName == nullptr)
+      return false;
+    if(strcmp(lhs.pObjectName, rhs.pObjectName) != 0)
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.objectType == rhs.objectType) &&
+         (lhs.objectHandle == rhs.objectHandle);
+}
+
+bool operator!=(VkDebugUtilsObjectNameInfoEXT const &lhs,
+                VkDebugUtilsObjectNameInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDebugUtilsObjectTagInfoEXT const &lhs,
+                VkDebugUtilsObjectTagInfoEXT const &rhs) noexcept {
+  if(lhs.tagSize != rhs.tagSize)
+    return false;
+
+  if(memcmp(lhs.pTag, rhs.pTag, lhs.tagSize) != 0)
+    return false;
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.objectType == rhs.objectType) &&
+         (lhs.objectHandle == rhs.objectHandle) &&
+         (lhs.tagName == rhs.tagName);
+}
+
+bool operator!=(VkDebugUtilsObjectTagInfoEXT const &lhs,
+                VkDebugUtilsObjectTagInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDebugUtilsLabelEXT const &lhs,
+                VkDebugUtilsLabelEXT const &rhs) noexcept {
+  if (lhs.pLabelName != rhs.pLabelName) {
+    if(lhs.pLabelName == nullptr || rhs.pLabelName == nullptr)
+      return false;
+    if(strcmp(lhs.pLabelName, rhs.pLabelName) != 0)
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 4; ++i) {
+    if(lhs.color[i] != rhs.color[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkDebugUtilsLabelEXT const &lhs,
+                VkDebugUtilsLabelEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDebugUtilsMessengerCreateInfoEXT const &lhs,
+                VkDebugUtilsMessengerCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.messageSeverity == rhs.messageSeverity) &&
+         (lhs.messageType == rhs.messageType) &&
+         (lhs.pfnUserCallback == rhs.pfnUserCallback) &&
+         (lhs.pUserData == rhs.pUserData);
+}
+
+bool operator!=(VkDebugUtilsMessengerCreateInfoEXT const &lhs,
+                VkDebugUtilsMessengerCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDebugUtilsMessengerCallbackDataEXT const &lhs,
+                VkDebugUtilsMessengerCallbackDataEXT const &rhs) noexcept {
+  if(lhs.queueLabelCount != rhs.queueLabelCount)
+    return false;
+
+  if(lhs.cmdBufLabelCount != rhs.cmdBufLabelCount)
+    return false;
+
+  if(lhs.objectCount != rhs.objectCount)
+    return false;
+
+  if (lhs.pMessageIdName != rhs.pMessageIdName) {
+    if(lhs.pMessageIdName == nullptr || rhs.pMessageIdName == nullptr)
+      return false;
+    if(strcmp(lhs.pMessageIdName, rhs.pMessageIdName) != 0)
+      return false;
+  }
+
+  if (lhs.pMessage != rhs.pMessage) {
+    if(lhs.pMessage == nullptr || rhs.pMessage == nullptr)
+      return false;
+    if(strcmp(lhs.pMessage, rhs.pMessage) != 0)
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.queueLabelCount; ++i) {
+    if(lhs.pQueueLabels[i] != rhs.pQueueLabels[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.cmdBufLabelCount; ++i) {
+    if(lhs.pCmdBufLabels[i] != rhs.pCmdBufLabels[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.objectCount; ++i) {
+    if(lhs.pObjects[i] != rhs.pObjects[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.messageIdNumber == rhs.messageIdNumber);
+}
+
+bool operator!=(VkDebugUtilsMessengerCallbackDataEXT const &lhs,
+                VkDebugUtilsMessengerCallbackDataEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &lhs,
+                VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceMemoryReport == rhs.deviceMemoryReport);
+}
+
+bool operator!=(VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &lhs,
+                VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceDeviceMemoryReportCreateInfoEXT const &lhs,
+                VkDeviceDeviceMemoryReportCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pfnUserCallback == rhs.pfnUserCallback) &&
+         (lhs.pUserData == rhs.pUserData);
+}
+
+bool operator!=(VkDeviceDeviceMemoryReportCreateInfoEXT const &lhs,
+                VkDeviceDeviceMemoryReportCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceMemoryReportCallbackDataEXT const &lhs,
+                VkDeviceMemoryReportCallbackDataEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.type == rhs.type) &&
+         (lhs.memoryObjectId == rhs.memoryObjectId) &&
+         (lhs.size == rhs.size) &&
+         (lhs.objectType == rhs.objectType) &&
+         (lhs.objectHandle == rhs.objectHandle) &&
+         (lhs.heapIndex == rhs.heapIndex);
+}
+
+bool operator!=(VkDeviceMemoryReportCallbackDataEXT const &lhs,
+                VkDeviceMemoryReportCallbackDataEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImportMemoryHostPointerInfoEXT const &lhs,
+                VkImportMemoryHostPointerInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.handleType == rhs.handleType) &&
+         (lhs.pHostPointer == rhs.pHostPointer);
+}
+
+bool operator!=(VkImportMemoryHostPointerInfoEXT const &lhs,
+                VkImportMemoryHostPointerInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryHostPointerPropertiesEXT const &lhs,
+                VkMemoryHostPointerPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryTypeBits == rhs.memoryTypeBits);
+}
+
+bool operator!=(VkMemoryHostPointerPropertiesEXT const &lhs,
+                VkMemoryHostPointerPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &lhs,
+                VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.minImportedHostPointerAlignment == rhs.minImportedHostPointerAlignment);
+}
+
+bool operator!=(VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &lhs,
+                VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &lhs,
+                VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.primitiveOverestimationSize == rhs.primitiveOverestimationSize) &&
+         (lhs.maxExtraPrimitiveOverestimationSize == rhs.maxExtraPrimitiveOverestimationSize) &&
+         (lhs.extraPrimitiveOverestimationSizeGranularity == rhs.extraPrimitiveOverestimationSizeGranularity) &&
+         (lhs.primitiveUnderestimation == rhs.primitiveUnderestimation) &&
+         (lhs.conservativePointAndLineRasterization == rhs.conservativePointAndLineRasterization) &&
+         (lhs.degenerateTrianglesRasterized == rhs.degenerateTrianglesRasterized) &&
+         (lhs.degenerateLinesRasterized == rhs.degenerateLinesRasterized) &&
+         (lhs.fullyCoveredFragmentShaderInputVariable == rhs.fullyCoveredFragmentShaderInputVariable) &&
+         (lhs.conservativeRasterizationPostDepthCoverage == rhs.conservativeRasterizationPostDepthCoverage);
+}
+
+bool operator!=(VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &lhs,
+                VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCalibratedTimestampInfoEXT const &lhs,
+                VkCalibratedTimestampInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.timeDomain == rhs.timeDomain);
+}
+
+bool operator!=(VkCalibratedTimestampInfoEXT const &lhs,
+                VkCalibratedTimestampInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderCorePropertiesAMD const &lhs,
+                VkPhysicalDeviceShaderCorePropertiesAMD const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderEngineCount == rhs.shaderEngineCount) &&
+         (lhs.shaderArraysPerEngineCount == rhs.shaderArraysPerEngineCount) &&
+         (lhs.computeUnitsPerShaderArray == rhs.computeUnitsPerShaderArray) &&
+         (lhs.simdPerComputeUnit == rhs.simdPerComputeUnit) &&
+         (lhs.wavefrontsPerSimd == rhs.wavefrontsPerSimd) &&
+         (lhs.wavefrontSize == rhs.wavefrontSize) &&
+         (lhs.sgprsPerSimd == rhs.sgprsPerSimd) &&
+         (lhs.minSgprAllocation == rhs.minSgprAllocation) &&
+         (lhs.maxSgprAllocation == rhs.maxSgprAllocation) &&
+         (lhs.sgprAllocationGranularity == rhs.sgprAllocationGranularity) &&
+         (lhs.vgprsPerSimd == rhs.vgprsPerSimd) &&
+         (lhs.minVgprAllocation == rhs.minVgprAllocation) &&
+         (lhs.maxVgprAllocation == rhs.maxVgprAllocation) &&
+         (lhs.vgprAllocationGranularity == rhs.vgprAllocationGranularity);
+}
+
+bool operator!=(VkPhysicalDeviceShaderCorePropertiesAMD const &lhs,
+                VkPhysicalDeviceShaderCorePropertiesAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderCoreProperties2AMD const &lhs,
+                VkPhysicalDeviceShaderCoreProperties2AMD const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderCoreFeatures == rhs.shaderCoreFeatures) &&
+         (lhs.activeComputeUnitCount == rhs.activeComputeUnitCount);
+}
+
+bool operator!=(VkPhysicalDeviceShaderCoreProperties2AMD const &lhs,
+                VkPhysicalDeviceShaderCoreProperties2AMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineRasterizationConservativeStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationConservativeStateCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.conservativeRasterizationMode == rhs.conservativeRasterizationMode) &&
+         (lhs.extraPrimitiveOverestimationSize == rhs.extraPrimitiveOverestimationSize);
+}
+
+bool operator!=(VkPipelineRasterizationConservativeStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationConservativeStateCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDescriptorIndexingFeatures const &lhs,
+                VkPhysicalDeviceDescriptorIndexingFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderInputAttachmentArrayDynamicIndexing == rhs.shaderInputAttachmentArrayDynamicIndexing) &&
+         (lhs.shaderUniformTexelBufferArrayDynamicIndexing == rhs.shaderUniformTexelBufferArrayDynamicIndexing) &&
+         (lhs.shaderStorageTexelBufferArrayDynamicIndexing == rhs.shaderStorageTexelBufferArrayDynamicIndexing) &&
+         (lhs.shaderUniformBufferArrayNonUniformIndexing == rhs.shaderUniformBufferArrayNonUniformIndexing) &&
+         (lhs.shaderSampledImageArrayNonUniformIndexing == rhs.shaderSampledImageArrayNonUniformIndexing) &&
+         (lhs.shaderStorageBufferArrayNonUniformIndexing == rhs.shaderStorageBufferArrayNonUniformIndexing) &&
+         (lhs.shaderStorageImageArrayNonUniformIndexing == rhs.shaderStorageImageArrayNonUniformIndexing) &&
+         (lhs.shaderInputAttachmentArrayNonUniformIndexing == rhs.shaderInputAttachmentArrayNonUniformIndexing) &&
+         (lhs.shaderUniformTexelBufferArrayNonUniformIndexing == rhs.shaderUniformTexelBufferArrayNonUniformIndexing) &&
+         (lhs.shaderStorageTexelBufferArrayNonUniformIndexing == rhs.shaderStorageTexelBufferArrayNonUniformIndexing) &&
+         (lhs.descriptorBindingUniformBufferUpdateAfterBind == rhs.descriptorBindingUniformBufferUpdateAfterBind) &&
+         (lhs.descriptorBindingSampledImageUpdateAfterBind == rhs.descriptorBindingSampledImageUpdateAfterBind) &&
+         (lhs.descriptorBindingStorageImageUpdateAfterBind == rhs.descriptorBindingStorageImageUpdateAfterBind) &&
+         (lhs.descriptorBindingStorageBufferUpdateAfterBind == rhs.descriptorBindingStorageBufferUpdateAfterBind) &&
+         (lhs.descriptorBindingUniformTexelBufferUpdateAfterBind == rhs.descriptorBindingUniformTexelBufferUpdateAfterBind) &&
+         (lhs.descriptorBindingStorageTexelBufferUpdateAfterBind == rhs.descriptorBindingStorageTexelBufferUpdateAfterBind) &&
+         (lhs.descriptorBindingUpdateUnusedWhilePending == rhs.descriptorBindingUpdateUnusedWhilePending) &&
+         (lhs.descriptorBindingPartiallyBound == rhs.descriptorBindingPartiallyBound) &&
+         (lhs.descriptorBindingVariableDescriptorCount == rhs.descriptorBindingVariableDescriptorCount) &&
+         (lhs.runtimeDescriptorArray == rhs.runtimeDescriptorArray);
+}
+
+bool operator!=(VkPhysicalDeviceDescriptorIndexingFeatures const &lhs,
+                VkPhysicalDeviceDescriptorIndexingFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDescriptorIndexingProperties const &lhs,
+                VkPhysicalDeviceDescriptorIndexingProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxUpdateAfterBindDescriptorsInAllPools == rhs.maxUpdateAfterBindDescriptorsInAllPools) &&
+         (lhs.shaderUniformBufferArrayNonUniformIndexingNative == rhs.shaderUniformBufferArrayNonUniformIndexingNative) &&
+         (lhs.shaderSampledImageArrayNonUniformIndexingNative == rhs.shaderSampledImageArrayNonUniformIndexingNative) &&
+         (lhs.shaderStorageBufferArrayNonUniformIndexingNative == rhs.shaderStorageBufferArrayNonUniformIndexingNative) &&
+         (lhs.shaderStorageImageArrayNonUniformIndexingNative == rhs.shaderStorageImageArrayNonUniformIndexingNative) &&
+         (lhs.shaderInputAttachmentArrayNonUniformIndexingNative == rhs.shaderInputAttachmentArrayNonUniformIndexingNative) &&
+         (lhs.robustBufferAccessUpdateAfterBind == rhs.robustBufferAccessUpdateAfterBind) &&
+         (lhs.quadDivergentImplicitLod == rhs.quadDivergentImplicitLod) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindSamplers == rhs.maxPerStageDescriptorUpdateAfterBindSamplers) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindUniformBuffers == rhs.maxPerStageDescriptorUpdateAfterBindUniformBuffers) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindStorageBuffers == rhs.maxPerStageDescriptorUpdateAfterBindStorageBuffers) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindSampledImages == rhs.maxPerStageDescriptorUpdateAfterBindSampledImages) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindStorageImages == rhs.maxPerStageDescriptorUpdateAfterBindStorageImages) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindInputAttachments == rhs.maxPerStageDescriptorUpdateAfterBindInputAttachments) &&
+         (lhs.maxPerStageUpdateAfterBindResources == rhs.maxPerStageUpdateAfterBindResources) &&
+         (lhs.maxDescriptorSetUpdateAfterBindSamplers == rhs.maxDescriptorSetUpdateAfterBindSamplers) &&
+         (lhs.maxDescriptorSetUpdateAfterBindUniformBuffers == rhs.maxDescriptorSetUpdateAfterBindUniformBuffers) &&
+         (lhs.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic) &&
+         (lhs.maxDescriptorSetUpdateAfterBindStorageBuffers == rhs.maxDescriptorSetUpdateAfterBindStorageBuffers) &&
+         (lhs.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic) &&
+         (lhs.maxDescriptorSetUpdateAfterBindSampledImages == rhs.maxDescriptorSetUpdateAfterBindSampledImages) &&
+         (lhs.maxDescriptorSetUpdateAfterBindStorageImages == rhs.maxDescriptorSetUpdateAfterBindStorageImages) &&
+         (lhs.maxDescriptorSetUpdateAfterBindInputAttachments == rhs.maxDescriptorSetUpdateAfterBindInputAttachments);
+}
+
+bool operator!=(VkPhysicalDeviceDescriptorIndexingProperties const &lhs,
+                VkPhysicalDeviceDescriptorIndexingProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorSetLayoutBindingFlagsCreateInfo const &lhs,
+                VkDescriptorSetLayoutBindingFlagsCreateInfo const &rhs) noexcept {
+  if(lhs.bindingCount != rhs.bindingCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.bindingCount; ++i) {
+    if(lhs.pBindingFlags[i] != rhs.pBindingFlags[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkDescriptorSetLayoutBindingFlagsCreateInfo const &lhs,
+                VkDescriptorSetLayoutBindingFlagsCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorSetVariableDescriptorCountAllocateInfo const &lhs,
+                VkDescriptorSetVariableDescriptorCountAllocateInfo const &rhs) noexcept {
+  if(lhs.descriptorSetCount != rhs.descriptorSetCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.descriptorSetCount; ++i) {
+    if(lhs.pDescriptorCounts[i] != rhs.pDescriptorCounts[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkDescriptorSetVariableDescriptorCountAllocateInfo const &lhs,
+                VkDescriptorSetVariableDescriptorCountAllocateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDescriptorSetVariableDescriptorCountLayoutSupport const &lhs,
+                VkDescriptorSetVariableDescriptorCountLayoutSupport const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxVariableDescriptorCount == rhs.maxVariableDescriptorCount);
+}
+
+bool operator!=(VkDescriptorSetVariableDescriptorCountLayoutSupport const &lhs,
+                VkDescriptorSetVariableDescriptorCountLayoutSupport const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAttachmentDescription2 const &lhs,
+                VkAttachmentDescription2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.format == rhs.format) &&
+         (lhs.samples == rhs.samples) &&
+         (lhs.loadOp == rhs.loadOp) &&
+         (lhs.storeOp == rhs.storeOp) &&
+         (lhs.stencilLoadOp == rhs.stencilLoadOp) &&
+         (lhs.stencilStoreOp == rhs.stencilStoreOp) &&
+         (lhs.initialLayout == rhs.initialLayout) &&
+         (lhs.finalLayout == rhs.finalLayout);
+}
+
+bool operator!=(VkAttachmentDescription2 const &lhs,
+                VkAttachmentDescription2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAttachmentReference2 const &lhs,
+                VkAttachmentReference2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.attachment == rhs.attachment) &&
+         (lhs.layout == rhs.layout) &&
+         (lhs.aspectMask == rhs.aspectMask);
+}
+
+bool operator!=(VkAttachmentReference2 const &lhs,
+                VkAttachmentReference2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubpassDescription2 const &lhs,
+                VkSubpassDescription2 const &rhs) noexcept {
+  if(lhs.inputAttachmentCount != rhs.inputAttachmentCount)
+    return false;
+
+  if(lhs.colorAttachmentCount != rhs.colorAttachmentCount)
+    return false;
+
+  if(lhs.colorAttachmentCount != rhs.colorAttachmentCount)
+    return false;
+
+  if(lhs.preserveAttachmentCount != rhs.preserveAttachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.inputAttachmentCount; ++i) {
+    if(lhs.pInputAttachments[i] != rhs.pInputAttachments[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.colorAttachmentCount; ++i) {
+    if(lhs.pColorAttachments[i] != rhs.pColorAttachments[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.colorAttachmentCount; ++i) {
+    if(lhs.pResolveAttachments[i] != rhs.pResolveAttachments[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.preserveAttachmentCount; ++i) {
+    if(lhs.pPreserveAttachments[i] != rhs.pPreserveAttachments[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pipelineBindPoint == rhs.pipelineBindPoint) &&
+         (lhs.viewMask == rhs.viewMask) &&
+         (lhs.pDepthStencilAttachment == rhs.pDepthStencilAttachment);
+}
+
+bool operator!=(VkSubpassDescription2 const &lhs,
+                VkSubpassDescription2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubpassDependency2 const &lhs,
+                VkSubpassDependency2 const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcSubpass == rhs.srcSubpass) &&
+         (lhs.dstSubpass == rhs.dstSubpass) &&
+         (lhs.srcStageMask == rhs.srcStageMask) &&
+         (lhs.dstStageMask == rhs.dstStageMask) &&
+         (lhs.srcAccessMask == rhs.srcAccessMask) &&
+         (lhs.dstAccessMask == rhs.dstAccessMask) &&
+         (lhs.dependencyFlags == rhs.dependencyFlags) &&
+         (lhs.viewOffset == rhs.viewOffset);
+}
+
+bool operator!=(VkSubpassDependency2 const &lhs,
+                VkSubpassDependency2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderPassCreateInfo2 const &lhs,
+                VkRenderPassCreateInfo2 const &rhs) noexcept {
+  if(lhs.attachmentCount != rhs.attachmentCount)
+    return false;
+
+  if(lhs.subpassCount != rhs.subpassCount)
+    return false;
+
+  if(lhs.dependencyCount != rhs.dependencyCount)
+    return false;
+
+  if(lhs.correlatedViewMaskCount != rhs.correlatedViewMaskCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.attachmentCount; ++i) {
+    if(lhs.pAttachments[i] != rhs.pAttachments[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.subpassCount; ++i) {
+    if(lhs.pSubpasses[i] != rhs.pSubpasses[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.dependencyCount; ++i) {
+    if(lhs.pDependencies[i] != rhs.pDependencies[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.correlatedViewMaskCount; ++i) {
+    if(lhs.pCorrelatedViewMasks[i] != rhs.pCorrelatedViewMasks[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkRenderPassCreateInfo2 const &lhs,
+                VkRenderPassCreateInfo2 const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubpassBeginInfo const &lhs,
+                VkSubpassBeginInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.contents == rhs.contents);
+}
+
+bool operator!=(VkSubpassBeginInfo const &lhs,
+                VkSubpassBeginInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubpassEndInfo const &lhs,
+                VkSubpassEndInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkSubpassEndInfo const &lhs,
+                VkSubpassEndInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceTimelineSemaphoreFeatures const &lhs,
+                VkPhysicalDeviceTimelineSemaphoreFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.timelineSemaphore == rhs.timelineSemaphore);
+}
+
+bool operator!=(VkPhysicalDeviceTimelineSemaphoreFeatures const &lhs,
+                VkPhysicalDeviceTimelineSemaphoreFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceTimelineSemaphoreProperties const &lhs,
+                VkPhysicalDeviceTimelineSemaphoreProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxTimelineSemaphoreValueDifference == rhs.maxTimelineSemaphoreValueDifference);
+}
+
+bool operator!=(VkPhysicalDeviceTimelineSemaphoreProperties const &lhs,
+                VkPhysicalDeviceTimelineSemaphoreProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSemaphoreTypeCreateInfo const &lhs,
+                VkSemaphoreTypeCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.semaphoreType == rhs.semaphoreType) &&
+         (lhs.initialValue == rhs.initialValue);
+}
+
+bool operator!=(VkSemaphoreTypeCreateInfo const &lhs,
+                VkSemaphoreTypeCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkTimelineSemaphoreSubmitInfo const &lhs,
+                VkTimelineSemaphoreSubmitInfo const &rhs) noexcept {
+  if(lhs.waitSemaphoreValueCount != rhs.waitSemaphoreValueCount)
+    return false;
+
+  if(lhs.signalSemaphoreValueCount != rhs.signalSemaphoreValueCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.waitSemaphoreValueCount; ++i) {
+    if(lhs.pWaitSemaphoreValues[i] != rhs.pWaitSemaphoreValues[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.signalSemaphoreValueCount; ++i) {
+    if(lhs.pSignalSemaphoreValues[i] != rhs.pSignalSemaphoreValues[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkTimelineSemaphoreSubmitInfo const &lhs,
+                VkTimelineSemaphoreSubmitInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSemaphoreWaitInfo const &lhs,
+                VkSemaphoreWaitInfo const &rhs) noexcept {
+  if(lhs.semaphoreCount != rhs.semaphoreCount)
+    return false;
+
+  if(lhs.semaphoreCount != rhs.semaphoreCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.semaphoreCount; ++i) {
+    if(lhs.pSemaphores[i] != rhs.pSemaphores[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.semaphoreCount; ++i) {
+    if(lhs.pValues[i] != rhs.pValues[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkSemaphoreWaitInfo const &lhs,
+                VkSemaphoreWaitInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSemaphoreSignalInfo const &lhs,
+                VkSemaphoreSignalInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.semaphore == rhs.semaphore) &&
+         (lhs.value == rhs.value);
+}
+
+bool operator!=(VkSemaphoreSignalInfo const &lhs,
+                VkSemaphoreSignalInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkVertexInputBindingDivisorDescriptionEXT const &lhs,
+                VkVertexInputBindingDivisorDescriptionEXT const &rhs) noexcept {
+  return (lhs.binding == rhs.binding) &&
+         (lhs.divisor == rhs.divisor);
+}
+
+bool operator!=(VkVertexInputBindingDivisorDescriptionEXT const &lhs,
+                VkVertexInputBindingDivisorDescriptionEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineVertexInputDivisorStateCreateInfoEXT const &lhs,
+                VkPipelineVertexInputDivisorStateCreateInfoEXT const &rhs) noexcept {
+  if(lhs.vertexBindingDivisorCount != rhs.vertexBindingDivisorCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.vertexBindingDivisorCount; ++i) {
+    if(lhs.pVertexBindingDivisors[i] != rhs.pVertexBindingDivisors[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkPipelineVertexInputDivisorStateCreateInfoEXT const &lhs,
+                VkPipelineVertexInputDivisorStateCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &lhs,
+                VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxVertexAttribDivisor == rhs.maxVertexAttribDivisor);
+}
+
+bool operator!=(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &lhs,
+                VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePCIBusInfoPropertiesEXT const &lhs,
+                VkPhysicalDevicePCIBusInfoPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pciDomain == rhs.pciDomain) &&
+         (lhs.pciBus == rhs.pciBus) &&
+         (lhs.pciDevice == rhs.pciDevice) &&
+         (lhs.pciFunction == rhs.pciFunction);
+}
+
+bool operator!=(VkPhysicalDevicePCIBusInfoPropertiesEXT const &lhs,
+                VkPhysicalDevicePCIBusInfoPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkImportAndroidHardwareBufferInfoANDROID const &lhs,
+                VkImportAndroidHardwareBufferInfoANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.buffer == rhs.buffer);
+}
+
+bool operator!=(VkImportAndroidHardwareBufferInfoANDROID const &lhs,
+                VkImportAndroidHardwareBufferInfoANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidHardwareBufferUsageANDROID const &lhs,
+                VkAndroidHardwareBufferUsageANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.androidHardwareBufferUsage == rhs.androidHardwareBufferUsage);
+}
+
+bool operator!=(VkAndroidHardwareBufferUsageANDROID const &lhs,
+                VkAndroidHardwareBufferUsageANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidHardwareBufferPropertiesANDROID const &lhs,
+                VkAndroidHardwareBufferPropertiesANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.allocationSize == rhs.allocationSize) &&
+         (lhs.memoryTypeBits == rhs.memoryTypeBits);
+}
+
+bool operator!=(VkAndroidHardwareBufferPropertiesANDROID const &lhs,
+                VkAndroidHardwareBufferPropertiesANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkMemoryGetAndroidHardwareBufferInfoANDROID const &lhs,
+                VkMemoryGetAndroidHardwareBufferInfoANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memory == rhs.memory);
+}
+
+bool operator!=(VkMemoryGetAndroidHardwareBufferInfoANDROID const &lhs,
+                VkMemoryGetAndroidHardwareBufferInfoANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidHardwareBufferFormatPropertiesANDROID const &lhs,
+                VkAndroidHardwareBufferFormatPropertiesANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.format == rhs.format) &&
+         (lhs.externalFormat == rhs.externalFormat) &&
+         (lhs.formatFeatures == rhs.formatFeatures) &&
+         (lhs.samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents) &&
+         (lhs.suggestedYcbcrModel == rhs.suggestedYcbcrModel) &&
+         (lhs.suggestedYcbcrRange == rhs.suggestedYcbcrRange) &&
+         (lhs.suggestedXChromaOffset == rhs.suggestedXChromaOffset) &&
+         (lhs.suggestedYChromaOffset == rhs.suggestedYChromaOffset);
+}
+
+bool operator!=(VkAndroidHardwareBufferFormatPropertiesANDROID const &lhs,
+                VkAndroidHardwareBufferFormatPropertiesANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+bool operator==(VkCommandBufferInheritanceConditionalRenderingInfoEXT const &lhs,
+                VkCommandBufferInheritanceConditionalRenderingInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.conditionalRenderingEnable == rhs.conditionalRenderingEnable);
+}
+
+bool operator!=(VkCommandBufferInheritanceConditionalRenderingInfoEXT const &lhs,
+                VkCommandBufferInheritanceConditionalRenderingInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkExternalFormatANDROID const &lhs,
+                VkExternalFormatANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.externalFormat == rhs.externalFormat);
+}
+
+bool operator!=(VkExternalFormatANDROID const &lhs,
+                VkExternalFormatANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+bool operator==(VkPhysicalDevice8BitStorageFeatures const &lhs,
+                VkPhysicalDevice8BitStorageFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.storageBuffer8BitAccess == rhs.storageBuffer8BitAccess) &&
+         (lhs.uniformAndStorageBuffer8BitAccess == rhs.uniformAndStorageBuffer8BitAccess) &&
+         (lhs.storagePushConstant8 == rhs.storagePushConstant8);
+}
+
+bool operator!=(VkPhysicalDevice8BitStorageFeatures const &lhs,
+                VkPhysicalDevice8BitStorageFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceConditionalRenderingFeaturesEXT const &lhs,
+                VkPhysicalDeviceConditionalRenderingFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.conditionalRendering == rhs.conditionalRendering) &&
+         (lhs.inheritedConditionalRendering == rhs.inheritedConditionalRendering);
+}
+
+bool operator!=(VkPhysicalDeviceConditionalRenderingFeaturesEXT const &lhs,
+                VkPhysicalDeviceConditionalRenderingFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceVulkanMemoryModelFeatures const &lhs,
+                VkPhysicalDeviceVulkanMemoryModelFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.vulkanMemoryModel == rhs.vulkanMemoryModel) &&
+         (lhs.vulkanMemoryModelDeviceScope == rhs.vulkanMemoryModelDeviceScope) &&
+         (lhs.vulkanMemoryModelAvailabilityVisibilityChains == rhs.vulkanMemoryModelAvailabilityVisibilityChains);
+}
+
+bool operator!=(VkPhysicalDeviceVulkanMemoryModelFeatures const &lhs,
+                VkPhysicalDeviceVulkanMemoryModelFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderAtomicInt64Features const &lhs,
+                VkPhysicalDeviceShaderAtomicInt64Features const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderBufferInt64Atomics == rhs.shaderBufferInt64Atomics) &&
+         (lhs.shaderSharedInt64Atomics == rhs.shaderSharedInt64Atomics);
+}
+
+bool operator!=(VkPhysicalDeviceShaderAtomicInt64Features const &lhs,
+                VkPhysicalDeviceShaderAtomicInt64Features const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderBufferFloat32Atomics == rhs.shaderBufferFloat32Atomics) &&
+         (lhs.shaderBufferFloat32AtomicAdd == rhs.shaderBufferFloat32AtomicAdd) &&
+         (lhs.shaderBufferFloat64Atomics == rhs.shaderBufferFloat64Atomics) &&
+         (lhs.shaderBufferFloat64AtomicAdd == rhs.shaderBufferFloat64AtomicAdd) &&
+         (lhs.shaderSharedFloat32Atomics == rhs.shaderSharedFloat32Atomics) &&
+         (lhs.shaderSharedFloat32AtomicAdd == rhs.shaderSharedFloat32AtomicAdd) &&
+         (lhs.shaderSharedFloat64Atomics == rhs.shaderSharedFloat64Atomics) &&
+         (lhs.shaderSharedFloat64AtomicAdd == rhs.shaderSharedFloat64AtomicAdd) &&
+         (lhs.shaderImageFloat32Atomics == rhs.shaderImageFloat32Atomics) &&
+         (lhs.shaderImageFloat32AtomicAdd == rhs.shaderImageFloat32AtomicAdd) &&
+         (lhs.sparseImageFloat32Atomics == rhs.sparseImageFloat32Atomics) &&
+         (lhs.sparseImageFloat32AtomicAdd == rhs.sparseImageFloat32AtomicAdd);
+}
+
+bool operator!=(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderBufferFloat16Atomics == rhs.shaderBufferFloat16Atomics) &&
+         (lhs.shaderBufferFloat16AtomicAdd == rhs.shaderBufferFloat16AtomicAdd) &&
+         (lhs.shaderBufferFloat16AtomicMinMax == rhs.shaderBufferFloat16AtomicMinMax) &&
+         (lhs.shaderBufferFloat32AtomicMinMax == rhs.shaderBufferFloat32AtomicMinMax) &&
+         (lhs.shaderBufferFloat64AtomicMinMax == rhs.shaderBufferFloat64AtomicMinMax) &&
+         (lhs.shaderSharedFloat16Atomics == rhs.shaderSharedFloat16Atomics) &&
+         (lhs.shaderSharedFloat16AtomicAdd == rhs.shaderSharedFloat16AtomicAdd) &&
+         (lhs.shaderSharedFloat16AtomicMinMax == rhs.shaderSharedFloat16AtomicMinMax) &&
+         (lhs.shaderSharedFloat32AtomicMinMax == rhs.shaderSharedFloat32AtomicMinMax) &&
+         (lhs.shaderSharedFloat64AtomicMinMax == rhs.shaderSharedFloat64AtomicMinMax) &&
+         (lhs.shaderImageFloat32AtomicMinMax == rhs.shaderImageFloat32AtomicMinMax) &&
+         (lhs.sparseImageFloat32AtomicMinMax == rhs.sparseImageFloat32AtomicMinMax);
+}
+
+bool operator!=(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &lhs,
+                VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.vertexAttributeInstanceRateDivisor == rhs.vertexAttributeInstanceRateDivisor) &&
+         (lhs.vertexAttributeInstanceRateZeroDivisor == rhs.vertexAttributeInstanceRateZeroDivisor);
+}
+
+bool operator!=(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &lhs,
+                VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkQueueFamilyCheckpointPropertiesNV const &lhs,
+                VkQueueFamilyCheckpointPropertiesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.checkpointExecutionStageMask == rhs.checkpointExecutionStageMask);
+}
+
+bool operator!=(VkQueueFamilyCheckpointPropertiesNV const &lhs,
+                VkQueueFamilyCheckpointPropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCheckpointDataNV const &lhs,
+                VkCheckpointDataNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stage == rhs.stage) &&
+         (lhs.pCheckpointMarker == rhs.pCheckpointMarker);
+}
+
+bool operator!=(VkCheckpointDataNV const &lhs,
+                VkCheckpointDataNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDepthStencilResolveProperties const &lhs,
+                VkPhysicalDeviceDepthStencilResolveProperties const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.supportedDepthResolveModes == rhs.supportedDepthResolveModes) &&
+         (lhs.supportedStencilResolveModes == rhs.supportedStencilResolveModes) &&
+         (lhs.independentResolveNone == rhs.independentResolveNone) &&
+         (lhs.independentResolve == rhs.independentResolve);
+}
+
+bool operator!=(VkPhysicalDeviceDepthStencilResolveProperties const &lhs,
+                VkPhysicalDeviceDepthStencilResolveProperties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubpassDescriptionDepthStencilResolve const &lhs,
+                VkSubpassDescriptionDepthStencilResolve const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.depthResolveMode == rhs.depthResolveMode) &&
+         (lhs.stencilResolveMode == rhs.stencilResolveMode) &&
+         (lhs.pDepthStencilResolveAttachment == rhs.pDepthStencilResolveAttachment);
+}
+
+bool operator!=(VkSubpassDescriptionDepthStencilResolve const &lhs,
+                VkSubpassDescriptionDepthStencilResolve const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageViewASTCDecodeModeEXT const &lhs,
+                VkImageViewASTCDecodeModeEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.decodeMode == rhs.decodeMode);
+}
+
+bool operator!=(VkImageViewASTCDecodeModeEXT const &lhs,
+                VkImageViewASTCDecodeModeEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceASTCDecodeFeaturesEXT const &lhs,
+                VkPhysicalDeviceASTCDecodeFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.decodeModeSharedExponent == rhs.decodeModeSharedExponent);
+}
+
+bool operator!=(VkPhysicalDeviceASTCDecodeFeaturesEXT const &lhs,
+                VkPhysicalDeviceASTCDecodeFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceTransformFeedbackFeaturesEXT const &lhs,
+                VkPhysicalDeviceTransformFeedbackFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.transformFeedback == rhs.transformFeedback) &&
+         (lhs.geometryStreams == rhs.geometryStreams);
+}
+
+bool operator!=(VkPhysicalDeviceTransformFeedbackFeaturesEXT const &lhs,
+                VkPhysicalDeviceTransformFeedbackFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceTransformFeedbackPropertiesEXT const &lhs,
+                VkPhysicalDeviceTransformFeedbackPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxTransformFeedbackStreams == rhs.maxTransformFeedbackStreams) &&
+         (lhs.maxTransformFeedbackBuffers == rhs.maxTransformFeedbackBuffers) &&
+         (lhs.maxTransformFeedbackBufferSize == rhs.maxTransformFeedbackBufferSize) &&
+         (lhs.maxTransformFeedbackStreamDataSize == rhs.maxTransformFeedbackStreamDataSize) &&
+         (lhs.maxTransformFeedbackBufferDataSize == rhs.maxTransformFeedbackBufferDataSize) &&
+         (lhs.maxTransformFeedbackBufferDataStride == rhs.maxTransformFeedbackBufferDataStride) &&
+         (lhs.transformFeedbackQueries == rhs.transformFeedbackQueries) &&
+         (lhs.transformFeedbackStreamsLinesTriangles == rhs.transformFeedbackStreamsLinesTriangles) &&
+         (lhs.transformFeedbackRasterizationStreamSelect == rhs.transformFeedbackRasterizationStreamSelect) &&
+         (lhs.transformFeedbackDraw == rhs.transformFeedbackDraw);
+}
+
+bool operator!=(VkPhysicalDeviceTransformFeedbackPropertiesEXT const &lhs,
+                VkPhysicalDeviceTransformFeedbackPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineRasterizationStateStreamCreateInfoEXT const &lhs,
+                VkPipelineRasterizationStateStreamCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.rasterizationStream == rhs.rasterizationStream);
+}
+
+bool operator!=(VkPipelineRasterizationStateStreamCreateInfoEXT const &lhs,
+                VkPipelineRasterizationStateStreamCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &lhs,
+                VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.representativeFragmentTest == rhs.representativeFragmentTest);
+}
+
+bool operator!=(VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &lhs,
+                VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &lhs,
+                VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.representativeFragmentTestEnable == rhs.representativeFragmentTestEnable);
+}
+
+bool operator!=(VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &lhs,
+                VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceExclusiveScissorFeaturesNV const &lhs,
+                VkPhysicalDeviceExclusiveScissorFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.exclusiveScissor == rhs.exclusiveScissor);
+}
+
+bool operator!=(VkPhysicalDeviceExclusiveScissorFeaturesNV const &lhs,
+                VkPhysicalDeviceExclusiveScissorFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineViewportExclusiveScissorStateCreateInfoNV const &lhs,
+                VkPipelineViewportExclusiveScissorStateCreateInfoNV const &rhs) noexcept {
+  if(lhs.exclusiveScissorCount != rhs.exclusiveScissorCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.exclusiveScissorCount; ++i) {
+    if(lhs.pExclusiveScissors[i] != rhs.pExclusiveScissors[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkPipelineViewportExclusiveScissorStateCreateInfoNV const &lhs,
+                VkPipelineViewportExclusiveScissorStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceCornerSampledImageFeaturesNV const &lhs,
+                VkPhysicalDeviceCornerSampledImageFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.cornerSampledImage == rhs.cornerSampledImage);
+}
+
+bool operator!=(VkPhysicalDeviceCornerSampledImageFeaturesNV const &lhs,
+                VkPhysicalDeviceCornerSampledImageFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &lhs,
+                VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.computeDerivativeGroupQuads == rhs.computeDerivativeGroupQuads) &&
+         (lhs.computeDerivativeGroupLinear == rhs.computeDerivativeGroupLinear);
+}
+
+bool operator!=(VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &lhs,
+                VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &lhs,
+                VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fragmentShaderBarycentric == rhs.fragmentShaderBarycentric);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &lhs,
+                VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderImageFootprintFeaturesNV const &lhs,
+                VkPhysicalDeviceShaderImageFootprintFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.imageFootprint == rhs.imageFootprint);
+}
+
+bool operator!=(VkPhysicalDeviceShaderImageFootprintFeaturesNV const &lhs,
+                VkPhysicalDeviceShaderImageFootprintFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &lhs,
+                VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.dedicatedAllocationImageAliasing == rhs.dedicatedAllocationImageAliasing);
+}
+
+bool operator!=(VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &lhs,
+                VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkShadingRatePaletteNV const &lhs,
+                VkShadingRatePaletteNV const &rhs) noexcept {
+  if(lhs.shadingRatePaletteEntryCount != rhs.shadingRatePaletteEntryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.shadingRatePaletteEntryCount; ++i) {
+    if(lhs.pShadingRatePaletteEntries[i] != rhs.pShadingRatePaletteEntries[i])
+      return false;
+  }
+
+  return true;
+}
+
+bool operator!=(VkShadingRatePaletteNV const &lhs,
+                VkShadingRatePaletteNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineViewportShadingRateImageStateCreateInfoNV const &lhs,
+                VkPipelineViewportShadingRateImageStateCreateInfoNV const &rhs) noexcept {
+  if(lhs.viewportCount != rhs.viewportCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.viewportCount; ++i) {
+    if(lhs.pShadingRatePalettes[i] != rhs.pShadingRatePalettes[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shadingRateImageEnable == rhs.shadingRateImageEnable);
+}
+
+bool operator!=(VkPipelineViewportShadingRateImageStateCreateInfoNV const &lhs,
+                VkPipelineViewportShadingRateImageStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShadingRateImageFeaturesNV const &lhs,
+                VkPhysicalDeviceShadingRateImageFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shadingRateImage == rhs.shadingRateImage) &&
+         (lhs.shadingRateCoarseSampleOrder == rhs.shadingRateCoarseSampleOrder);
+}
+
+bool operator!=(VkPhysicalDeviceShadingRateImageFeaturesNV const &lhs,
+                VkPhysicalDeviceShadingRateImageFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShadingRateImagePropertiesNV const &lhs,
+                VkPhysicalDeviceShadingRateImagePropertiesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shadingRateTexelSize == rhs.shadingRateTexelSize) &&
+         (lhs.shadingRatePaletteSize == rhs.shadingRatePaletteSize) &&
+         (lhs.shadingRateMaxCoarseSamples == rhs.shadingRateMaxCoarseSamples);
+}
+
+bool operator!=(VkPhysicalDeviceShadingRateImagePropertiesNV const &lhs,
+                VkPhysicalDeviceShadingRateImagePropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &lhs,
+                VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.invocationMask == rhs.invocationMask);
+}
+
+bool operator!=(VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &lhs,
+                VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCoarseSampleLocationNV const &lhs,
+                VkCoarseSampleLocationNV const &rhs) noexcept {
+  return (lhs.pixelX == rhs.pixelX) &&
+         (lhs.pixelY == rhs.pixelY) &&
+         (lhs.sample == rhs.sample);
+}
+
+bool operator!=(VkCoarseSampleLocationNV const &lhs,
+                VkCoarseSampleLocationNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCoarseSampleOrderCustomNV const &lhs,
+                VkCoarseSampleOrderCustomNV const &rhs) noexcept {
+  if(lhs.sampleLocationCount != rhs.sampleLocationCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.sampleLocationCount; ++i) {
+    if(lhs.pSampleLocations[i] != rhs.pSampleLocations[i])
+      return false;
+  }
+
+  return (lhs.shadingRate == rhs.shadingRate) &&
+         (lhs.sampleCount == rhs.sampleCount);
+}
+
+bool operator!=(VkCoarseSampleOrderCustomNV const &lhs,
+                VkCoarseSampleOrderCustomNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &lhs,
+                VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &rhs) noexcept {
+  if(lhs.customSampleOrderCount != rhs.customSampleOrderCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.customSampleOrderCount; ++i) {
+    if(lhs.pCustomSampleOrders[i] != rhs.pCustomSampleOrders[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.sampleOrderType == rhs.sampleOrderType);
+}
+
+bool operator!=(VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &lhs,
+                VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMeshShaderFeaturesNV const &lhs,
+                VkPhysicalDeviceMeshShaderFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.taskShader == rhs.taskShader) &&
+         (lhs.meshShader == rhs.meshShader);
+}
+
+bool operator!=(VkPhysicalDeviceMeshShaderFeaturesNV const &lhs,
+                VkPhysicalDeviceMeshShaderFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMeshShaderPropertiesNV const &lhs,
+                VkPhysicalDeviceMeshShaderPropertiesNV const &rhs) noexcept {
+  for(uint32_t i = 0; i < 3; ++i) {
+    if(lhs.maxTaskWorkGroupSize[i] != rhs.maxTaskWorkGroupSize[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 3; ++i) {
+    if(lhs.maxMeshWorkGroupSize[i] != rhs.maxMeshWorkGroupSize[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxDrawMeshTasksCount == rhs.maxDrawMeshTasksCount) &&
+         (lhs.maxTaskWorkGroupInvocations == rhs.maxTaskWorkGroupInvocations) &&
+         (lhs.maxTaskTotalMemorySize == rhs.maxTaskTotalMemorySize) &&
+         (lhs.maxTaskOutputCount == rhs.maxTaskOutputCount) &&
+         (lhs.maxMeshWorkGroupInvocations == rhs.maxMeshWorkGroupInvocations) &&
+         (lhs.maxMeshTotalMemorySize == rhs.maxMeshTotalMemorySize) &&
+         (lhs.maxMeshOutputVertices == rhs.maxMeshOutputVertices) &&
+         (lhs.maxMeshOutputPrimitives == rhs.maxMeshOutputPrimitives) &&
+         (lhs.maxMeshMultiviewViewCount == rhs.maxMeshMultiviewViewCount) &&
+         (lhs.meshOutputPerVertexGranularity == rhs.meshOutputPerVertexGranularity) &&
+         (lhs.meshOutputPerPrimitiveGranularity == rhs.meshOutputPerPrimitiveGranularity);
+}
+
+bool operator!=(VkPhysicalDeviceMeshShaderPropertiesNV const &lhs,
+                VkPhysicalDeviceMeshShaderPropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDrawMeshTasksIndirectCommandNV const &lhs,
+                VkDrawMeshTasksIndirectCommandNV const &rhs) noexcept {
+  return (lhs.taskCount == rhs.taskCount) &&
+         (lhs.firstTask == rhs.firstTask);
+}
+
+bool operator!=(VkDrawMeshTasksIndirectCommandNV const &lhs,
+                VkDrawMeshTasksIndirectCommandNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRayTracingShaderGroupCreateInfoNV const &lhs,
+                VkRayTracingShaderGroupCreateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.type == rhs.type) &&
+         (lhs.generalShader == rhs.generalShader) &&
+         (lhs.closestHitShader == rhs.closestHitShader) &&
+         (lhs.anyHitShader == rhs.anyHitShader) &&
+         (lhs.intersectionShader == rhs.intersectionShader);
+}
+
+bool operator!=(VkRayTracingShaderGroupCreateInfoNV const &lhs,
+                VkRayTracingShaderGroupCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRayTracingShaderGroupCreateInfoKHR const &lhs,
+                VkRayTracingShaderGroupCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.type == rhs.type) &&
+         (lhs.generalShader == rhs.generalShader) &&
+         (lhs.closestHitShader == rhs.closestHitShader) &&
+         (lhs.anyHitShader == rhs.anyHitShader) &&
+         (lhs.intersectionShader == rhs.intersectionShader) &&
+         (lhs.pShaderGroupCaptureReplayHandle == rhs.pShaderGroupCaptureReplayHandle);
+}
+
+bool operator!=(VkRayTracingShaderGroupCreateInfoKHR const &lhs,
+                VkRayTracingShaderGroupCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRayTracingPipelineCreateInfoNV const &lhs,
+                VkRayTracingPipelineCreateInfoNV const &rhs) noexcept {
+  if(lhs.stageCount != rhs.stageCount)
+    return false;
+
+  if(lhs.groupCount != rhs.groupCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.stageCount; ++i) {
+    if(lhs.pStages[i] != rhs.pStages[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.groupCount; ++i) {
+    if(lhs.pGroups[i] != rhs.pGroups[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.maxRecursionDepth == rhs.maxRecursionDepth) &&
+         (lhs.layout == rhs.layout) &&
+         (lhs.basePipelineHandle == rhs.basePipelineHandle) &&
+         (lhs.basePipelineIndex == rhs.basePipelineIndex);
+}
+
+bool operator!=(VkRayTracingPipelineCreateInfoNV const &lhs,
+                VkRayTracingPipelineCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRayTracingPipelineCreateInfoKHR const &lhs,
+                VkRayTracingPipelineCreateInfoKHR const &rhs) noexcept {
+  if(lhs.stageCount != rhs.stageCount)
+    return false;
+
+  if(lhs.groupCount != rhs.groupCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.stageCount; ++i) {
+    if(lhs.pStages[i] != rhs.pStages[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.groupCount; ++i) {
+    if(lhs.pGroups[i] != rhs.pGroups[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.maxPipelineRayRecursionDepth == rhs.maxPipelineRayRecursionDepth) &&
+         (lhs.pLibraryInfo == rhs.pLibraryInfo) &&
+         (lhs.pLibraryInterface == rhs.pLibraryInterface) &&
+         (lhs.pDynamicState == rhs.pDynamicState) &&
+         (lhs.layout == rhs.layout) &&
+         (lhs.basePipelineHandle == rhs.basePipelineHandle) &&
+         (lhs.basePipelineIndex == rhs.basePipelineIndex);
+}
+
+bool operator!=(VkRayTracingPipelineCreateInfoKHR const &lhs,
+                VkRayTracingPipelineCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkGeometryTrianglesNV const &lhs,
+                VkGeometryTrianglesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.vertexData == rhs.vertexData) &&
+         (lhs.vertexOffset == rhs.vertexOffset) &&
+         (lhs.vertexCount == rhs.vertexCount) &&
+         (lhs.vertexStride == rhs.vertexStride) &&
+         (lhs.vertexFormat == rhs.vertexFormat) &&
+         (lhs.indexData == rhs.indexData) &&
+         (lhs.indexOffset == rhs.indexOffset) &&
+         (lhs.indexCount == rhs.indexCount) &&
+         (lhs.indexType == rhs.indexType) &&
+         (lhs.transformData == rhs.transformData) &&
+         (lhs.transformOffset == rhs.transformOffset);
+}
+
+bool operator!=(VkGeometryTrianglesNV const &lhs,
+                VkGeometryTrianglesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkGeometryAABBNV const &lhs,
+                VkGeometryAABBNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.aabbData == rhs.aabbData) &&
+         (lhs.numAABBs == rhs.numAABBs) &&
+         (lhs.stride == rhs.stride) &&
+         (lhs.offset == rhs.offset);
+}
+
+bool operator!=(VkGeometryAABBNV const &lhs,
+                VkGeometryAABBNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkGeometryDataNV const &lhs,
+                VkGeometryDataNV const &rhs) noexcept {
+  return (lhs.triangles == rhs.triangles) &&
+         (lhs.aabbs == rhs.aabbs);
+}
+
+bool operator!=(VkGeometryDataNV const &lhs,
+                VkGeometryDataNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkGeometryNV const &lhs,
+                VkGeometryNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.geometryType == rhs.geometryType) &&
+         (lhs.geometry == rhs.geometry) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkGeometryNV const &lhs,
+                VkGeometryNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureInfoNV const &lhs,
+                VkAccelerationStructureInfoNV const &rhs) noexcept {
+  if(lhs.geometryCount != rhs.geometryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.geometryCount; ++i) {
+    if(lhs.pGeometries[i] != rhs.pGeometries[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.type == rhs.type) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.instanceCount == rhs.instanceCount);
+}
+
+bool operator!=(VkAccelerationStructureInfoNV const &lhs,
+                VkAccelerationStructureInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureCreateInfoNV const &lhs,
+                VkAccelerationStructureCreateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.compactedSize == rhs.compactedSize) &&
+         (lhs.info == rhs.info);
+}
+
+bool operator!=(VkAccelerationStructureCreateInfoNV const &lhs,
+                VkAccelerationStructureCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBindAccelerationStructureMemoryInfoNV const &lhs,
+                VkBindAccelerationStructureMemoryInfoNV const &rhs) noexcept {
+  if(lhs.deviceIndexCount != rhs.deviceIndexCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.deviceIndexCount; ++i) {
+    if(lhs.pDeviceIndices[i] != rhs.pDeviceIndices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.accelerationStructure == rhs.accelerationStructure) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.memoryOffset == rhs.memoryOffset);
+}
+
+bool operator!=(VkBindAccelerationStructureMemoryInfoNV const &lhs,
+                VkBindAccelerationStructureMemoryInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkWriteDescriptorSetAccelerationStructureKHR const &lhs,
+                VkWriteDescriptorSetAccelerationStructureKHR const &rhs) noexcept {
+  if(lhs.accelerationStructureCount != rhs.accelerationStructureCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.accelerationStructureCount; ++i) {
+    if(lhs.pAccelerationStructures[i] != rhs.pAccelerationStructures[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkWriteDescriptorSetAccelerationStructureKHR const &lhs,
+                VkWriteDescriptorSetAccelerationStructureKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkWriteDescriptorSetAccelerationStructureNV const &lhs,
+                VkWriteDescriptorSetAccelerationStructureNV const &rhs) noexcept {
+  if(lhs.accelerationStructureCount != rhs.accelerationStructureCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.accelerationStructureCount; ++i) {
+    if(lhs.pAccelerationStructures[i] != rhs.pAccelerationStructures[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkWriteDescriptorSetAccelerationStructureNV const &lhs,
+                VkWriteDescriptorSetAccelerationStructureNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureMemoryRequirementsInfoNV const &lhs,
+                VkAccelerationStructureMemoryRequirementsInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.type == rhs.type) &&
+         (lhs.accelerationStructure == rhs.accelerationStructure);
+}
+
+bool operator!=(VkAccelerationStructureMemoryRequirementsInfoNV const &lhs,
+                VkAccelerationStructureMemoryRequirementsInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceAccelerationStructureFeaturesKHR const &lhs,
+                VkPhysicalDeviceAccelerationStructureFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.accelerationStructure == rhs.accelerationStructure) &&
+         (lhs.accelerationStructureCaptureReplay == rhs.accelerationStructureCaptureReplay) &&
+         (lhs.accelerationStructureIndirectBuild == rhs.accelerationStructureIndirectBuild) &&
+         (lhs.accelerationStructureHostCommands == rhs.accelerationStructureHostCommands) &&
+         (lhs.descriptorBindingAccelerationStructureUpdateAfterBind == rhs.descriptorBindingAccelerationStructureUpdateAfterBind);
+}
+
+bool operator!=(VkPhysicalDeviceAccelerationStructureFeaturesKHR const &lhs,
+                VkPhysicalDeviceAccelerationStructureFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &lhs,
+                VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.rayTracingPipeline == rhs.rayTracingPipeline) &&
+         (lhs.rayTracingPipelineShaderGroupHandleCaptureReplay == rhs.rayTracingPipelineShaderGroupHandleCaptureReplay) &&
+         (lhs.rayTracingPipelineShaderGroupHandleCaptureReplayMixed == rhs.rayTracingPipelineShaderGroupHandleCaptureReplayMixed) &&
+         (lhs.rayTracingPipelineTraceRaysIndirect == rhs.rayTracingPipelineTraceRaysIndirect) &&
+         (lhs.rayTraversalPrimitiveCulling == rhs.rayTraversalPrimitiveCulling);
+}
+
+bool operator!=(VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &lhs,
+                VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceRayQueryFeaturesKHR const &lhs,
+                VkPhysicalDeviceRayQueryFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.rayQuery == rhs.rayQuery);
+}
+
+bool operator!=(VkPhysicalDeviceRayQueryFeaturesKHR const &lhs,
+                VkPhysicalDeviceRayQueryFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceAccelerationStructurePropertiesKHR const &lhs,
+                VkPhysicalDeviceAccelerationStructurePropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxGeometryCount == rhs.maxGeometryCount) &&
+         (lhs.maxInstanceCount == rhs.maxInstanceCount) &&
+         (lhs.maxPrimitiveCount == rhs.maxPrimitiveCount) &&
+         (lhs.maxPerStageDescriptorAccelerationStructures == rhs.maxPerStageDescriptorAccelerationStructures) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindAccelerationStructures == rhs.maxPerStageDescriptorUpdateAfterBindAccelerationStructures) &&
+         (lhs.maxDescriptorSetAccelerationStructures == rhs.maxDescriptorSetAccelerationStructures) &&
+         (lhs.maxDescriptorSetUpdateAfterBindAccelerationStructures == rhs.maxDescriptorSetUpdateAfterBindAccelerationStructures) &&
+         (lhs.minAccelerationStructureScratchOffsetAlignment == rhs.minAccelerationStructureScratchOffsetAlignment);
+}
+
+bool operator!=(VkPhysicalDeviceAccelerationStructurePropertiesKHR const &lhs,
+                VkPhysicalDeviceAccelerationStructurePropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &lhs,
+                VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderGroupHandleSize == rhs.shaderGroupHandleSize) &&
+         (lhs.maxRayRecursionDepth == rhs.maxRayRecursionDepth) &&
+         (lhs.maxShaderGroupStride == rhs.maxShaderGroupStride) &&
+         (lhs.shaderGroupBaseAlignment == rhs.shaderGroupBaseAlignment) &&
+         (lhs.shaderGroupHandleCaptureReplaySize == rhs.shaderGroupHandleCaptureReplaySize) &&
+         (lhs.maxRayDispatchInvocationCount == rhs.maxRayDispatchInvocationCount) &&
+         (lhs.shaderGroupHandleAlignment == rhs.shaderGroupHandleAlignment) &&
+         (lhs.maxRayHitAttributeSize == rhs.maxRayHitAttributeSize);
+}
+
+bool operator!=(VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &lhs,
+                VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceRayTracingPropertiesNV const &lhs,
+                VkPhysicalDeviceRayTracingPropertiesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderGroupHandleSize == rhs.shaderGroupHandleSize) &&
+         (lhs.maxRecursionDepth == rhs.maxRecursionDepth) &&
+         (lhs.maxShaderGroupStride == rhs.maxShaderGroupStride) &&
+         (lhs.shaderGroupBaseAlignment == rhs.shaderGroupBaseAlignment) &&
+         (lhs.maxGeometryCount == rhs.maxGeometryCount) &&
+         (lhs.maxInstanceCount == rhs.maxInstanceCount) &&
+         (lhs.maxTriangleCount == rhs.maxTriangleCount) &&
+         (lhs.maxDescriptorSetAccelerationStructures == rhs.maxDescriptorSetAccelerationStructures);
+}
+
+bool operator!=(VkPhysicalDeviceRayTracingPropertiesNV const &lhs,
+                VkPhysicalDeviceRayTracingPropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkStridedDeviceAddressRegionKHR const &lhs,
+                VkStridedDeviceAddressRegionKHR const &rhs) noexcept {
+  return (lhs.deviceAddress == rhs.deviceAddress) &&
+         (lhs.stride == rhs.stride) &&
+         (lhs.size == rhs.size);
+}
+
+bool operator!=(VkStridedDeviceAddressRegionKHR const &lhs,
+                VkStridedDeviceAddressRegionKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkTraceRaysIndirectCommandKHR const &lhs,
+                VkTraceRaysIndirectCommandKHR const &rhs) noexcept {
+  return (lhs.width == rhs.width) &&
+         (lhs.height == rhs.height) &&
+         (lhs.depth == rhs.depth);
+}
+
+bool operator!=(VkTraceRaysIndirectCommandKHR const &lhs,
+                VkTraceRaysIndirectCommandKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDrmFormatModifierPropertiesListEXT const &lhs,
+                VkDrmFormatModifierPropertiesListEXT const &rhs) noexcept {
+  if(lhs.drmFormatModifierCount != rhs.drmFormatModifierCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.drmFormatModifierCount; ++i) {
+    if(lhs.pDrmFormatModifierProperties[i] != rhs.pDrmFormatModifierProperties[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkDrmFormatModifierPropertiesListEXT const &lhs,
+                VkDrmFormatModifierPropertiesListEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDrmFormatModifierPropertiesEXT const &lhs,
+                VkDrmFormatModifierPropertiesEXT const &rhs) noexcept {
+  return (lhs.drmFormatModifier == rhs.drmFormatModifier) &&
+         (lhs.drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount) &&
+         (lhs.drmFormatModifierTilingFeatures == rhs.drmFormatModifierTilingFeatures);
+}
+
+bool operator!=(VkDrmFormatModifierPropertiesEXT const &lhs,
+                VkDrmFormatModifierPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &lhs,
+                VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &rhs) noexcept {
+  if(lhs.queueFamilyIndexCount != rhs.queueFamilyIndexCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.queueFamilyIndexCount; ++i) {
+    if(lhs.pQueueFamilyIndices[i] != rhs.pQueueFamilyIndices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.drmFormatModifier == rhs.drmFormatModifier) &&
+         (lhs.sharingMode == rhs.sharingMode);
+}
+
+bool operator!=(VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &lhs,
+                VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageDrmFormatModifierListCreateInfoEXT const &lhs,
+                VkImageDrmFormatModifierListCreateInfoEXT const &rhs) noexcept {
+  if(lhs.drmFormatModifierCount != rhs.drmFormatModifierCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.drmFormatModifierCount; ++i) {
+    if(lhs.pDrmFormatModifiers[i] != rhs.pDrmFormatModifiers[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkImageDrmFormatModifierListCreateInfoEXT const &lhs,
+                VkImageDrmFormatModifierListCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageDrmFormatModifierExplicitCreateInfoEXT const &lhs,
+                VkImageDrmFormatModifierExplicitCreateInfoEXT const &rhs) noexcept {
+  if(lhs.drmFormatModifierPlaneCount != rhs.drmFormatModifierPlaneCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.drmFormatModifierPlaneCount; ++i) {
+    if(lhs.pPlaneLayouts[i] != rhs.pPlaneLayouts[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.drmFormatModifier == rhs.drmFormatModifier);
+}
+
+bool operator!=(VkImageDrmFormatModifierExplicitCreateInfoEXT const &lhs,
+                VkImageDrmFormatModifierExplicitCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageDrmFormatModifierPropertiesEXT const &lhs,
+                VkImageDrmFormatModifierPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.drmFormatModifier == rhs.drmFormatModifier);
+}
+
+bool operator!=(VkImageDrmFormatModifierPropertiesEXT const &lhs,
+                VkImageDrmFormatModifierPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageStencilUsageCreateInfo const &lhs,
+                VkImageStencilUsageCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stencilUsage == rhs.stencilUsage);
+}
+
+bool operator!=(VkImageStencilUsageCreateInfo const &lhs,
+                VkImageStencilUsageCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceMemoryOverallocationCreateInfoAMD const &lhs,
+                VkDeviceMemoryOverallocationCreateInfoAMD const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.overallocationBehavior == rhs.overallocationBehavior);
+}
+
+bool operator!=(VkDeviceMemoryOverallocationCreateInfoAMD const &lhs,
+                VkDeviceMemoryOverallocationCreateInfoAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fragmentDensityMap == rhs.fragmentDensityMap) &&
+         (lhs.fragmentDensityMapDynamic == rhs.fragmentDensityMapDynamic) &&
+         (lhs.fragmentDensityMapNonSubsampledImages == rhs.fragmentDensityMapNonSubsampledImages);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fragmentDensityMapDeferred == rhs.fragmentDensityMapDeferred);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.minFragmentDensityTexelSize == rhs.minFragmentDensityTexelSize) &&
+         (lhs.maxFragmentDensityTexelSize == rhs.maxFragmentDensityTexelSize) &&
+         (lhs.fragmentDensityInvocations == rhs.fragmentDensityInvocations);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.subsampledLoads == rhs.subsampledLoads) &&
+         (lhs.subsampledCoarseReconstructionEarlyAccess == rhs.subsampledCoarseReconstructionEarlyAccess) &&
+         (lhs.maxSubsampledArrayLayers == rhs.maxSubsampledArrayLayers) &&
+         (lhs.maxDescriptorSetSubsampledSamplers == rhs.maxDescriptorSetSubsampledSamplers);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &lhs,
+                VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderPassFragmentDensityMapCreateInfoEXT const &lhs,
+                VkRenderPassFragmentDensityMapCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fragmentDensityMapAttachment == rhs.fragmentDensityMapAttachment);
+}
+
+bool operator!=(VkRenderPassFragmentDensityMapCreateInfoEXT const &lhs,
+                VkRenderPassFragmentDensityMapCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceScalarBlockLayoutFeatures const &lhs,
+                VkPhysicalDeviceScalarBlockLayoutFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.scalarBlockLayout == rhs.scalarBlockLayout);
+}
+
+bool operator!=(VkPhysicalDeviceScalarBlockLayoutFeatures const &lhs,
+                VkPhysicalDeviceScalarBlockLayoutFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSurfaceProtectedCapabilitiesKHR const &lhs,
+                VkSurfaceProtectedCapabilitiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.supportsProtected == rhs.supportsProtected);
+}
+
+bool operator!=(VkSurfaceProtectedCapabilitiesKHR const &lhs,
+                VkSurfaceProtectedCapabilitiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &lhs,
+                VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.uniformBufferStandardLayout == rhs.uniformBufferStandardLayout);
+}
+
+bool operator!=(VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &lhs,
+                VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDepthClipEnableFeaturesEXT const &lhs,
+                VkPhysicalDeviceDepthClipEnableFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.depthClipEnable == rhs.depthClipEnable);
+}
+
+bool operator!=(VkPhysicalDeviceDepthClipEnableFeaturesEXT const &lhs,
+                VkPhysicalDeviceDepthClipEnableFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineRasterizationDepthClipStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationDepthClipStateCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.depthClipEnable == rhs.depthClipEnable);
+}
+
+bool operator!=(VkPipelineRasterizationDepthClipStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationDepthClipStateCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMemoryBudgetPropertiesEXT const &lhs,
+                VkPhysicalDeviceMemoryBudgetPropertiesEXT const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i) {
+    if(lhs.heapBudget[i] != rhs.heapBudget[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i) {
+    if(lhs.heapUsage[i] != rhs.heapUsage[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkPhysicalDeviceMemoryBudgetPropertiesEXT const &lhs,
+                VkPhysicalDeviceMemoryBudgetPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMemoryPriorityFeaturesEXT const &lhs,
+                VkPhysicalDeviceMemoryPriorityFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryPriority == rhs.memoryPriority);
+}
+
+bool operator!=(VkPhysicalDeviceMemoryPriorityFeaturesEXT const &lhs,
+                VkPhysicalDeviceMemoryPriorityFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryPriorityAllocateInfoEXT const &lhs,
+                VkMemoryPriorityAllocateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.priority == rhs.priority);
+}
+
+bool operator!=(VkMemoryPriorityAllocateInfoEXT const &lhs,
+                VkMemoryPriorityAllocateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &lhs,
+                VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pageableDeviceLocalMemory == rhs.pageableDeviceLocalMemory);
+}
+
+bool operator!=(VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &lhs,
+                VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceBufferDeviceAddressFeatures const &lhs,
+                VkPhysicalDeviceBufferDeviceAddressFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.bufferDeviceAddress == rhs.bufferDeviceAddress) &&
+         (lhs.bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay) &&
+         (lhs.bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice);
+}
+
+bool operator!=(VkPhysicalDeviceBufferDeviceAddressFeatures const &lhs,
+                VkPhysicalDeviceBufferDeviceAddressFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &lhs,
+                VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.bufferDeviceAddress == rhs.bufferDeviceAddress) &&
+         (lhs.bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay) &&
+         (lhs.bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice);
+}
+
+bool operator!=(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &lhs,
+                VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferDeviceAddressInfo const &lhs,
+                VkBufferDeviceAddressInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.buffer == rhs.buffer);
+}
+
+bool operator!=(VkBufferDeviceAddressInfo const &lhs,
+                VkBufferDeviceAddressInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferOpaqueCaptureAddressCreateInfo const &lhs,
+                VkBufferOpaqueCaptureAddressCreateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.opaqueCaptureAddress == rhs.opaqueCaptureAddress);
+}
+
+bool operator!=(VkBufferOpaqueCaptureAddressCreateInfo const &lhs,
+                VkBufferOpaqueCaptureAddressCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferDeviceAddressCreateInfoEXT const &lhs,
+                VkBufferDeviceAddressCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceAddress == rhs.deviceAddress);
+}
+
+bool operator!=(VkBufferDeviceAddressCreateInfoEXT const &lhs,
+                VkBufferDeviceAddressCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceImageViewImageFormatInfoEXT const &lhs,
+                VkPhysicalDeviceImageViewImageFormatInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.imageViewType == rhs.imageViewType);
+}
+
+bool operator!=(VkPhysicalDeviceImageViewImageFormatInfoEXT const &lhs,
+                VkPhysicalDeviceImageViewImageFormatInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFilterCubicImageViewImageFormatPropertiesEXT const &lhs,
+                VkFilterCubicImageViewImageFormatPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.filterCubic == rhs.filterCubic) &&
+         (lhs.filterCubicMinmax == rhs.filterCubicMinmax);
+}
+
+bool operator!=(VkFilterCubicImageViewImageFormatPropertiesEXT const &lhs,
+                VkFilterCubicImageViewImageFormatPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceImagelessFramebufferFeatures const &lhs,
+                VkPhysicalDeviceImagelessFramebufferFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.imagelessFramebuffer == rhs.imagelessFramebuffer);
+}
+
+bool operator!=(VkPhysicalDeviceImagelessFramebufferFeatures const &lhs,
+                VkPhysicalDeviceImagelessFramebufferFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFramebufferAttachmentsCreateInfo const &lhs,
+                VkFramebufferAttachmentsCreateInfo const &rhs) noexcept {
+  if(lhs.attachmentImageInfoCount != rhs.attachmentImageInfoCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.attachmentImageInfoCount; ++i) {
+    if(lhs.pAttachmentImageInfos[i] != rhs.pAttachmentImageInfos[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkFramebufferAttachmentsCreateInfo const &lhs,
+                VkFramebufferAttachmentsCreateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFramebufferAttachmentImageInfo const &lhs,
+                VkFramebufferAttachmentImageInfo const &rhs) noexcept {
+  if(lhs.viewFormatCount != rhs.viewFormatCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.viewFormatCount; ++i) {
+    if(lhs.pViewFormats[i] != rhs.pViewFormats[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.usage == rhs.usage) &&
+         (lhs.width == rhs.width) &&
+         (lhs.height == rhs.height) &&
+         (lhs.layerCount == rhs.layerCount);
+}
+
+bool operator!=(VkFramebufferAttachmentImageInfo const &lhs,
+                VkFramebufferAttachmentImageInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderPassAttachmentBeginInfo const &lhs,
+                VkRenderPassAttachmentBeginInfo const &rhs) noexcept {
+  if(lhs.attachmentCount != rhs.attachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.attachmentCount; ++i) {
+    if(lhs.pAttachments[i] != rhs.pAttachments[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkRenderPassAttachmentBeginInfo const &lhs,
+                VkRenderPassAttachmentBeginInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const &lhs,
+                VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.textureCompressionASTC_HDR == rhs.textureCompressionASTC_HDR);
+}
+
+bool operator!=(VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const &lhs,
+                VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceCooperativeMatrixFeaturesNV const &lhs,
+                VkPhysicalDeviceCooperativeMatrixFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.cooperativeMatrix == rhs.cooperativeMatrix) &&
+         (lhs.cooperativeMatrixRobustBufferAccess == rhs.cooperativeMatrixRobustBufferAccess);
+}
+
+bool operator!=(VkPhysicalDeviceCooperativeMatrixFeaturesNV const &lhs,
+                VkPhysicalDeviceCooperativeMatrixFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceCooperativeMatrixPropertiesNV const &lhs,
+                VkPhysicalDeviceCooperativeMatrixPropertiesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.cooperativeMatrixSupportedStages == rhs.cooperativeMatrixSupportedStages);
+}
+
+bool operator!=(VkPhysicalDeviceCooperativeMatrixPropertiesNV const &lhs,
+                VkPhysicalDeviceCooperativeMatrixPropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCooperativeMatrixPropertiesNV const &lhs,
+                VkCooperativeMatrixPropertiesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.MSize == rhs.MSize) &&
+         (lhs.NSize == rhs.NSize) &&
+         (lhs.KSize == rhs.KSize) &&
+         (lhs.AType == rhs.AType) &&
+         (lhs.BType == rhs.BType) &&
+         (lhs.CType == rhs.CType) &&
+         (lhs.DType == rhs.DType) &&
+         (lhs.scope == rhs.scope);
+}
+
+bool operator!=(VkCooperativeMatrixPropertiesNV const &lhs,
+                VkCooperativeMatrixPropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &lhs,
+                VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.ycbcrImageArrays == rhs.ycbcrImageArrays);
+}
+
+bool operator!=(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &lhs,
+                VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageViewHandleInfoNVX const &lhs,
+                VkImageViewHandleInfoNVX const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.imageView == rhs.imageView) &&
+         (lhs.descriptorType == rhs.descriptorType) &&
+         (lhs.sampler == rhs.sampler);
+}
+
+bool operator!=(VkImageViewHandleInfoNVX const &lhs,
+                VkImageViewHandleInfoNVX const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageViewAddressPropertiesNVX const &lhs,
+                VkImageViewAddressPropertiesNVX const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceAddress == rhs.deviceAddress) &&
+         (lhs.size == rhs.size);
+}
+
+bool operator!=(VkImageViewAddressPropertiesNVX const &lhs,
+                VkImageViewAddressPropertiesNVX const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_GGP
+bool operator==(VkPresentFrameTokenGGP const &lhs,
+                VkPresentFrameTokenGGP const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.frameToken == rhs.frameToken);
+}
+
+bool operator!=(VkPresentFrameTokenGGP const &lhs,
+                VkPresentFrameTokenGGP const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_GGP
+
+bool operator==(VkPipelineCreationFeedbackEXT const &lhs,
+                VkPipelineCreationFeedbackEXT const &rhs) noexcept {
+  return (lhs.flags == rhs.flags) &&
+         (lhs.duration == rhs.duration);
+}
+
+bool operator!=(VkPipelineCreationFeedbackEXT const &lhs,
+                VkPipelineCreationFeedbackEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineCreationFeedbackCreateInfoEXT const &lhs,
+                VkPipelineCreationFeedbackCreateInfoEXT const &rhs) noexcept {
+  if(lhs.pipelineStageCreationFeedbackCount != rhs.pipelineStageCreationFeedbackCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.pipelineStageCreationFeedbackCount; ++i) {
+    if(lhs.pPipelineStageCreationFeedbacks[i] != rhs.pPipelineStageCreationFeedbacks[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pPipelineCreationFeedback == rhs.pPipelineCreationFeedback);
+}
+
+bool operator!=(VkPipelineCreationFeedbackCreateInfoEXT const &lhs,
+                VkPipelineCreationFeedbackCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkSurfaceFullScreenExclusiveInfoEXT const &lhs,
+                VkSurfaceFullScreenExclusiveInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fullScreenExclusive == rhs.fullScreenExclusive);
+}
+
+bool operator!=(VkSurfaceFullScreenExclusiveInfoEXT const &lhs,
+                VkSurfaceFullScreenExclusiveInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkSurfaceFullScreenExclusiveWin32InfoEXT const &lhs,
+                VkSurfaceFullScreenExclusiveWin32InfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.hmonitor == rhs.hmonitor);
+}
+
+bool operator!=(VkSurfaceFullScreenExclusiveWin32InfoEXT const &lhs,
+                VkSurfaceFullScreenExclusiveWin32InfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+bool operator==(VkSurfaceCapabilitiesFullScreenExclusiveEXT const &lhs,
+                VkSurfaceCapabilitiesFullScreenExclusiveEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fullScreenExclusiveSupported == rhs.fullScreenExclusiveSupported);
+}
+
+bool operator!=(VkSurfaceCapabilitiesFullScreenExclusiveEXT const &lhs,
+                VkSurfaceCapabilitiesFullScreenExclusiveEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+bool operator==(VkPhysicalDevicePerformanceQueryFeaturesKHR const &lhs,
+                VkPhysicalDevicePerformanceQueryFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.performanceCounterQueryPools == rhs.performanceCounterQueryPools) &&
+         (lhs.performanceCounterMultipleQueryPools == rhs.performanceCounterMultipleQueryPools);
+}
+
+bool operator!=(VkPhysicalDevicePerformanceQueryFeaturesKHR const &lhs,
+                VkPhysicalDevicePerformanceQueryFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePerformanceQueryPropertiesKHR const &lhs,
+                VkPhysicalDevicePerformanceQueryPropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.allowCommandBufferQueryCopies == rhs.allowCommandBufferQueryCopies);
+}
+
+bool operator!=(VkPhysicalDevicePerformanceQueryPropertiesKHR const &lhs,
+                VkPhysicalDevicePerformanceQueryPropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPerformanceCounterKHR const &lhs,
+                VkPerformanceCounterKHR const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_UUID_SIZE; ++i) {
+    if(lhs.uuid[i] != rhs.uuid[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.unit == rhs.unit) &&
+         (lhs.scope == rhs.scope) &&
+         (lhs.storage == rhs.storage);
+}
+
+bool operator!=(VkPerformanceCounterKHR const &lhs,
+                VkPerformanceCounterKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPerformanceCounterDescriptionKHR const &lhs,
+                VkPerformanceCounterDescriptionKHR const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i) {
+    if(lhs.name[i] != rhs.name[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i) {
+    if(lhs.category[i] != rhs.category[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i) {
+    if(lhs.description[i] != rhs.description[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkPerformanceCounterDescriptionKHR const &lhs,
+                VkPerformanceCounterDescriptionKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkQueryPoolPerformanceCreateInfoKHR const &lhs,
+                VkQueryPoolPerformanceCreateInfoKHR const &rhs) noexcept {
+  if(lhs.counterIndexCount != rhs.counterIndexCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.counterIndexCount; ++i) {
+    if(lhs.pCounterIndices[i] != rhs.pCounterIndices[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.queueFamilyIndex == rhs.queueFamilyIndex);
+}
+
+bool operator!=(VkQueryPoolPerformanceCreateInfoKHR const &lhs,
+                VkQueryPoolPerformanceCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAcquireProfilingLockInfoKHR const &lhs,
+                VkAcquireProfilingLockInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.timeout == rhs.timeout);
+}
+
+bool operator!=(VkAcquireProfilingLockInfoKHR const &lhs,
+                VkAcquireProfilingLockInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPerformanceQuerySubmitInfoKHR const &lhs,
+                VkPerformanceQuerySubmitInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.counterPassIndex == rhs.counterPassIndex);
+}
+
+bool operator!=(VkPerformanceQuerySubmitInfoKHR const &lhs,
+                VkPerformanceQuerySubmitInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkHeadlessSurfaceCreateInfoEXT const &lhs,
+                VkHeadlessSurfaceCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkHeadlessSurfaceCreateInfoEXT const &lhs,
+                VkHeadlessSurfaceCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceCoverageReductionModeFeaturesNV const &lhs,
+                VkPhysicalDeviceCoverageReductionModeFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.coverageReductionMode == rhs.coverageReductionMode);
+}
+
+bool operator!=(VkPhysicalDeviceCoverageReductionModeFeaturesNV const &lhs,
+                VkPhysicalDeviceCoverageReductionModeFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineCoverageReductionStateCreateInfoNV const &lhs,
+                VkPipelineCoverageReductionStateCreateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.coverageReductionMode == rhs.coverageReductionMode);
+}
+
+bool operator!=(VkPipelineCoverageReductionStateCreateInfoNV const &lhs,
+                VkPipelineCoverageReductionStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFramebufferMixedSamplesCombinationNV const &lhs,
+                VkFramebufferMixedSamplesCombinationNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.coverageReductionMode == rhs.coverageReductionMode) &&
+         (lhs.rasterizationSamples == rhs.rasterizationSamples) &&
+         (lhs.depthStencilSamples == rhs.depthStencilSamples) &&
+         (lhs.colorSamples == rhs.colorSamples);
+}
+
+bool operator!=(VkFramebufferMixedSamplesCombinationNV const &lhs,
+                VkFramebufferMixedSamplesCombinationNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &lhs,
+                VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderIntegerFunctions2 == rhs.shaderIntegerFunctions2);
+}
+
+bool operator!=(VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &lhs,
+                VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkInitializePerformanceApiInfoINTEL const &lhs,
+                VkInitializePerformanceApiInfoINTEL const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pUserData == rhs.pUserData);
+}
+
+bool operator!=(VkInitializePerformanceApiInfoINTEL const &lhs,
+                VkInitializePerformanceApiInfoINTEL const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkQueryPoolPerformanceQueryCreateInfoINTEL const &lhs,
+                VkQueryPoolPerformanceQueryCreateInfoINTEL const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.performanceCountersSampling == rhs.performanceCountersSampling);
+}
+
+bool operator!=(VkQueryPoolPerformanceQueryCreateInfoINTEL const &lhs,
+                VkQueryPoolPerformanceQueryCreateInfoINTEL const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPerformanceMarkerInfoINTEL const &lhs,
+                VkPerformanceMarkerInfoINTEL const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.marker == rhs.marker);
+}
+
+bool operator!=(VkPerformanceMarkerInfoINTEL const &lhs,
+                VkPerformanceMarkerInfoINTEL const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPerformanceStreamMarkerInfoINTEL const &lhs,
+                VkPerformanceStreamMarkerInfoINTEL const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.marker == rhs.marker);
+}
+
+bool operator!=(VkPerformanceStreamMarkerInfoINTEL const &lhs,
+                VkPerformanceStreamMarkerInfoINTEL const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPerformanceOverrideInfoINTEL const &lhs,
+                VkPerformanceOverrideInfoINTEL const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.type == rhs.type) &&
+         (lhs.enable == rhs.enable) &&
+         (lhs.parameter == rhs.parameter);
+}
+
+bool operator!=(VkPerformanceOverrideInfoINTEL const &lhs,
+                VkPerformanceOverrideInfoINTEL const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPerformanceConfigurationAcquireInfoINTEL const &lhs,
+                VkPerformanceConfigurationAcquireInfoINTEL const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.type == rhs.type);
+}
+
+bool operator!=(VkPerformanceConfigurationAcquireInfoINTEL const &lhs,
+                VkPerformanceConfigurationAcquireInfoINTEL const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderClockFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderClockFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderSubgroupClock == rhs.shaderSubgroupClock) &&
+         (lhs.shaderDeviceClock == rhs.shaderDeviceClock);
+}
+
+bool operator!=(VkPhysicalDeviceShaderClockFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderClockFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &lhs,
+                VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.indexTypeUint8 == rhs.indexTypeUint8);
+}
+
+bool operator!=(VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &lhs,
+                VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &lhs,
+                VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderSMCount == rhs.shaderSMCount) &&
+         (lhs.shaderWarpsPerSM == rhs.shaderWarpsPerSM);
+}
+
+bool operator!=(VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &lhs,
+                VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &lhs,
+                VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderSMBuiltins == rhs.shaderSMBuiltins);
+}
+
+bool operator!=(VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &lhs,
+                VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fragmentShaderSampleInterlock == rhs.fragmentShaderSampleInterlock) &&
+         (lhs.fragmentShaderPixelInterlock == rhs.fragmentShaderPixelInterlock) &&
+         (lhs.fragmentShaderShadingRateInterlock == rhs.fragmentShaderShadingRateInterlock);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &lhs,
+                VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &lhs,
+                VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.separateDepthStencilLayouts == rhs.separateDepthStencilLayouts);
+}
+
+bool operator!=(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &lhs,
+                VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAttachmentReferenceStencilLayout const &lhs,
+                VkAttachmentReferenceStencilLayout const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stencilLayout == rhs.stencilLayout);
+}
+
+bool operator!=(VkAttachmentReferenceStencilLayout const &lhs,
+                VkAttachmentReferenceStencilLayout const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &lhs,
+                VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.primitiveTopologyListRestart == rhs.primitiveTopologyListRestart) &&
+         (lhs.primitiveTopologyPatchListRestart == rhs.primitiveTopologyPatchListRestart);
+}
+
+bool operator!=(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &lhs,
+                VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAttachmentDescriptionStencilLayout const &lhs,
+                VkAttachmentDescriptionStencilLayout const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stencilInitialLayout == rhs.stencilInitialLayout) &&
+         (lhs.stencilFinalLayout == rhs.stencilFinalLayout);
+}
+
+bool operator!=(VkAttachmentDescriptionStencilLayout const &lhs,
+                VkAttachmentDescriptionStencilLayout const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &lhs,
+                VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pipelineExecutableInfo == rhs.pipelineExecutableInfo);
+}
+
+bool operator!=(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &lhs,
+                VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineInfoKHR const &lhs,
+                VkPipelineInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pipeline == rhs.pipeline);
+}
+
+bool operator!=(VkPipelineInfoKHR const &lhs,
+                VkPipelineInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineExecutablePropertiesKHR const &lhs,
+                VkPipelineExecutablePropertiesKHR const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i) {
+    if(lhs.name[i] != rhs.name[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i) {
+    if(lhs.description[i] != rhs.description[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stages == rhs.stages) &&
+         (lhs.subgroupSize == rhs.subgroupSize);
+}
+
+bool operator!=(VkPipelineExecutablePropertiesKHR const &lhs,
+                VkPipelineExecutablePropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineExecutableInfoKHR const &lhs,
+                VkPipelineExecutableInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pipeline == rhs.pipeline) &&
+         (lhs.executableIndex == rhs.executableIndex);
+}
+
+bool operator!=(VkPipelineExecutableInfoKHR const &lhs,
+                VkPipelineExecutableInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineExecutableInternalRepresentationKHR const &lhs,
+                VkPipelineExecutableInternalRepresentationKHR const &rhs) noexcept {
+  if(lhs.dataSize != rhs.dataSize)
+    return false;
+
+  for(uint32_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i) {
+    if(lhs.name[i] != rhs.name[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i) {
+    if(lhs.description[i] != rhs.description[i])
+      return false;
+  }
+
+  if(memcmp(lhs.pData, rhs.pData, lhs.dataSize) != 0)
+    return false;
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.isText == rhs.isText);
+}
+
+bool operator!=(VkPipelineExecutableInternalRepresentationKHR const &lhs,
+                VkPipelineExecutableInternalRepresentationKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderDemoteToHelperInvocation == rhs.shaderDemoteToHelperInvocation);
+}
+
+bool operator!=(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &lhs,
+                VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.texelBufferAlignment == rhs.texelBufferAlignment);
+}
+
+bool operator!=(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &lhs,
+                VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const &lhs,
+                VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.storageTexelBufferOffsetAlignmentBytes == rhs.storageTexelBufferOffsetAlignmentBytes) &&
+         (lhs.storageTexelBufferOffsetSingleTexelAlignment == rhs.storageTexelBufferOffsetSingleTexelAlignment) &&
+         (lhs.uniformTexelBufferOffsetAlignmentBytes == rhs.uniformTexelBufferOffsetAlignmentBytes) &&
+         (lhs.uniformTexelBufferOffsetSingleTexelAlignment == rhs.uniformTexelBufferOffsetSingleTexelAlignment);
+}
+
+bool operator!=(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const &lhs,
+                VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const &lhs,
+                VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.subgroupSizeControl == rhs.subgroupSizeControl) &&
+         (lhs.computeFullSubgroups == rhs.computeFullSubgroups);
+}
+
+bool operator!=(VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const &lhs,
+                VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const &lhs,
+                VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.minSubgroupSize == rhs.minSubgroupSize) &&
+         (lhs.maxSubgroupSize == rhs.maxSubgroupSize) &&
+         (lhs.maxComputeWorkgroupSubgroups == rhs.maxComputeWorkgroupSubgroups) &&
+         (lhs.requiredSubgroupSizeStages == rhs.requiredSubgroupSizeStages);
+}
+
+bool operator!=(VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const &lhs,
+                VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const &lhs,
+                VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.requiredSubgroupSize == rhs.requiredSubgroupSize);
+}
+
+bool operator!=(VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const &lhs,
+                VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubpassShadingPipelineCreateInfoHUAWEI const &lhs,
+                VkSubpassShadingPipelineCreateInfoHUAWEI const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.renderPass == rhs.renderPass) &&
+         (lhs.subpass == rhs.subpass);
+}
+
+bool operator!=(VkSubpassShadingPipelineCreateInfoHUAWEI const &lhs,
+                VkSubpassShadingPipelineCreateInfoHUAWEI const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &lhs,
+                VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxSubpassShadingWorkgroupSizeAspectRatio == rhs.maxSubpassShadingWorkgroupSizeAspectRatio);
+}
+
+bool operator!=(VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &lhs,
+                VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryOpaqueCaptureAddressAllocateInfo const &lhs,
+                VkMemoryOpaqueCaptureAddressAllocateInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.opaqueCaptureAddress == rhs.opaqueCaptureAddress);
+}
+
+bool operator!=(VkMemoryOpaqueCaptureAddressAllocateInfo const &lhs,
+                VkMemoryOpaqueCaptureAddressAllocateInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceMemoryOpaqueCaptureAddressInfo const &lhs,
+                VkDeviceMemoryOpaqueCaptureAddressInfo const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memory == rhs.memory);
+}
+
+bool operator!=(VkDeviceMemoryOpaqueCaptureAddressInfo const &lhs,
+                VkDeviceMemoryOpaqueCaptureAddressInfo const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceLineRasterizationFeaturesEXT const &lhs,
+                VkPhysicalDeviceLineRasterizationFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.rectangularLines == rhs.rectangularLines) &&
+         (lhs.bresenhamLines == rhs.bresenhamLines) &&
+         (lhs.smoothLines == rhs.smoothLines) &&
+         (lhs.stippledRectangularLines == rhs.stippledRectangularLines) &&
+         (lhs.stippledBresenhamLines == rhs.stippledBresenhamLines) &&
+         (lhs.stippledSmoothLines == rhs.stippledSmoothLines);
+}
+
+bool operator!=(VkPhysicalDeviceLineRasterizationFeaturesEXT const &lhs,
+                VkPhysicalDeviceLineRasterizationFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceLineRasterizationPropertiesEXT const &lhs,
+                VkPhysicalDeviceLineRasterizationPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.lineSubPixelPrecisionBits == rhs.lineSubPixelPrecisionBits);
+}
+
+bool operator!=(VkPhysicalDeviceLineRasterizationPropertiesEXT const &lhs,
+                VkPhysicalDeviceLineRasterizationPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineRasterizationLineStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationLineStateCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.lineRasterizationMode == rhs.lineRasterizationMode) &&
+         (lhs.stippledLineEnable == rhs.stippledLineEnable) &&
+         (lhs.lineStippleFactor == rhs.lineStippleFactor) &&
+         (lhs.lineStipplePattern == rhs.lineStipplePattern);
+}
+
+bool operator!=(VkPipelineRasterizationLineStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationLineStateCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const &lhs,
+                VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pipelineCreationCacheControl == rhs.pipelineCreationCacheControl);
+}
+
+bool operator!=(VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const &lhs,
+                VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceVulkan11Features const &lhs,
+                VkPhysicalDeviceVulkan11Features const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.storageBuffer16BitAccess == rhs.storageBuffer16BitAccess) &&
+         (lhs.uniformAndStorageBuffer16BitAccess == rhs.uniformAndStorageBuffer16BitAccess) &&
+         (lhs.storagePushConstant16 == rhs.storagePushConstant16) &&
+         (lhs.storageInputOutput16 == rhs.storageInputOutput16) &&
+         (lhs.multiview == rhs.multiview) &&
+         (lhs.multiviewGeometryShader == rhs.multiviewGeometryShader) &&
+         (lhs.multiviewTessellationShader == rhs.multiviewTessellationShader) &&
+         (lhs.variablePointersStorageBuffer == rhs.variablePointersStorageBuffer) &&
+         (lhs.variablePointers == rhs.variablePointers) &&
+         (lhs.protectedMemory == rhs.protectedMemory) &&
+         (lhs.samplerYcbcrConversion == rhs.samplerYcbcrConversion) &&
+         (lhs.shaderDrawParameters == rhs.shaderDrawParameters);
+}
+
+bool operator!=(VkPhysicalDeviceVulkan11Features const &lhs,
+                VkPhysicalDeviceVulkan11Features const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceVulkan11Properties const &lhs,
+                VkPhysicalDeviceVulkan11Properties const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_UUID_SIZE; ++i) {
+    if(lhs.deviceUUID[i] != rhs.deviceUUID[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_UUID_SIZE; ++i) {
+    if(lhs.driverUUID[i] != rhs.driverUUID[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_LUID_SIZE; ++i) {
+    if(lhs.deviceLUID[i] != rhs.deviceLUID[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceNodeMask == rhs.deviceNodeMask) &&
+         (lhs.deviceLUIDValid == rhs.deviceLUIDValid) &&
+         (lhs.subgroupSize == rhs.subgroupSize) &&
+         (lhs.subgroupSupportedStages == rhs.subgroupSupportedStages) &&
+         (lhs.subgroupSupportedOperations == rhs.subgroupSupportedOperations) &&
+         (lhs.subgroupQuadOperationsInAllStages == rhs.subgroupQuadOperationsInAllStages) &&
+         (lhs.pointClippingBehavior == rhs.pointClippingBehavior) &&
+         (lhs.maxMultiviewViewCount == rhs.maxMultiviewViewCount) &&
+         (lhs.maxMultiviewInstanceIndex == rhs.maxMultiviewInstanceIndex) &&
+         (lhs.protectedNoFault == rhs.protectedNoFault) &&
+         (lhs.maxPerSetDescriptors == rhs.maxPerSetDescriptors) &&
+         (lhs.maxMemoryAllocationSize == rhs.maxMemoryAllocationSize);
+}
+
+bool operator!=(VkPhysicalDeviceVulkan11Properties const &lhs,
+                VkPhysicalDeviceVulkan11Properties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceVulkan12Features const &lhs,
+                VkPhysicalDeviceVulkan12Features const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.samplerMirrorClampToEdge == rhs.samplerMirrorClampToEdge) &&
+         (lhs.drawIndirectCount == rhs.drawIndirectCount) &&
+         (lhs.storageBuffer8BitAccess == rhs.storageBuffer8BitAccess) &&
+         (lhs.uniformAndStorageBuffer8BitAccess == rhs.uniformAndStorageBuffer8BitAccess) &&
+         (lhs.storagePushConstant8 == rhs.storagePushConstant8) &&
+         (lhs.shaderBufferInt64Atomics == rhs.shaderBufferInt64Atomics) &&
+         (lhs.shaderSharedInt64Atomics == rhs.shaderSharedInt64Atomics) &&
+         (lhs.shaderFloat16 == rhs.shaderFloat16) &&
+         (lhs.shaderInt8 == rhs.shaderInt8) &&
+         (lhs.descriptorIndexing == rhs.descriptorIndexing) &&
+         (lhs.shaderInputAttachmentArrayDynamicIndexing == rhs.shaderInputAttachmentArrayDynamicIndexing) &&
+         (lhs.shaderUniformTexelBufferArrayDynamicIndexing == rhs.shaderUniformTexelBufferArrayDynamicIndexing) &&
+         (lhs.shaderStorageTexelBufferArrayDynamicIndexing == rhs.shaderStorageTexelBufferArrayDynamicIndexing) &&
+         (lhs.shaderUniformBufferArrayNonUniformIndexing == rhs.shaderUniformBufferArrayNonUniformIndexing) &&
+         (lhs.shaderSampledImageArrayNonUniformIndexing == rhs.shaderSampledImageArrayNonUniformIndexing) &&
+         (lhs.shaderStorageBufferArrayNonUniformIndexing == rhs.shaderStorageBufferArrayNonUniformIndexing) &&
+         (lhs.shaderStorageImageArrayNonUniformIndexing == rhs.shaderStorageImageArrayNonUniformIndexing) &&
+         (lhs.shaderInputAttachmentArrayNonUniformIndexing == rhs.shaderInputAttachmentArrayNonUniformIndexing) &&
+         (lhs.shaderUniformTexelBufferArrayNonUniformIndexing == rhs.shaderUniformTexelBufferArrayNonUniformIndexing) &&
+         (lhs.shaderStorageTexelBufferArrayNonUniformIndexing == rhs.shaderStorageTexelBufferArrayNonUniformIndexing) &&
+         (lhs.descriptorBindingUniformBufferUpdateAfterBind == rhs.descriptorBindingUniformBufferUpdateAfterBind) &&
+         (lhs.descriptorBindingSampledImageUpdateAfterBind == rhs.descriptorBindingSampledImageUpdateAfterBind) &&
+         (lhs.descriptorBindingStorageImageUpdateAfterBind == rhs.descriptorBindingStorageImageUpdateAfterBind) &&
+         (lhs.descriptorBindingStorageBufferUpdateAfterBind == rhs.descriptorBindingStorageBufferUpdateAfterBind) &&
+         (lhs.descriptorBindingUniformTexelBufferUpdateAfterBind == rhs.descriptorBindingUniformTexelBufferUpdateAfterBind) &&
+         (lhs.descriptorBindingStorageTexelBufferUpdateAfterBind == rhs.descriptorBindingStorageTexelBufferUpdateAfterBind) &&
+         (lhs.descriptorBindingUpdateUnusedWhilePending == rhs.descriptorBindingUpdateUnusedWhilePending) &&
+         (lhs.descriptorBindingPartiallyBound == rhs.descriptorBindingPartiallyBound) &&
+         (lhs.descriptorBindingVariableDescriptorCount == rhs.descriptorBindingVariableDescriptorCount) &&
+         (lhs.runtimeDescriptorArray == rhs.runtimeDescriptorArray) &&
+         (lhs.samplerFilterMinmax == rhs.samplerFilterMinmax) &&
+         (lhs.scalarBlockLayout == rhs.scalarBlockLayout) &&
+         (lhs.imagelessFramebuffer == rhs.imagelessFramebuffer) &&
+         (lhs.uniformBufferStandardLayout == rhs.uniformBufferStandardLayout) &&
+         (lhs.shaderSubgroupExtendedTypes == rhs.shaderSubgroupExtendedTypes) &&
+         (lhs.separateDepthStencilLayouts == rhs.separateDepthStencilLayouts) &&
+         (lhs.hostQueryReset == rhs.hostQueryReset) &&
+         (lhs.timelineSemaphore == rhs.timelineSemaphore) &&
+         (lhs.bufferDeviceAddress == rhs.bufferDeviceAddress) &&
+         (lhs.bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay) &&
+         (lhs.bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice) &&
+         (lhs.vulkanMemoryModel == rhs.vulkanMemoryModel) &&
+         (lhs.vulkanMemoryModelDeviceScope == rhs.vulkanMemoryModelDeviceScope) &&
+         (lhs.vulkanMemoryModelAvailabilityVisibilityChains == rhs.vulkanMemoryModelAvailabilityVisibilityChains) &&
+         (lhs.shaderOutputViewportIndex == rhs.shaderOutputViewportIndex) &&
+         (lhs.shaderOutputLayer == rhs.shaderOutputLayer) &&
+         (lhs.subgroupBroadcastDynamicId == rhs.subgroupBroadcastDynamicId);
+}
+
+bool operator!=(VkPhysicalDeviceVulkan12Features const &lhs,
+                VkPhysicalDeviceVulkan12Features const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceVulkan12Properties const &lhs,
+                VkPhysicalDeviceVulkan12Properties const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_DRIVER_NAME_SIZE; ++i) {
+    if(lhs.driverName[i] != rhs.driverName[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_DRIVER_INFO_SIZE; ++i) {
+    if(lhs.driverInfo[i] != rhs.driverInfo[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.driverID == rhs.driverID) &&
+         (lhs.conformanceVersion == rhs.conformanceVersion) &&
+         (lhs.denormBehaviorIndependence == rhs.denormBehaviorIndependence) &&
+         (lhs.roundingModeIndependence == rhs.roundingModeIndependence) &&
+         (lhs.shaderSignedZeroInfNanPreserveFloat16 == rhs.shaderSignedZeroInfNanPreserveFloat16) &&
+         (lhs.shaderSignedZeroInfNanPreserveFloat32 == rhs.shaderSignedZeroInfNanPreserveFloat32) &&
+         (lhs.shaderSignedZeroInfNanPreserveFloat64 == rhs.shaderSignedZeroInfNanPreserveFloat64) &&
+         (lhs.shaderDenormPreserveFloat16 == rhs.shaderDenormPreserveFloat16) &&
+         (lhs.shaderDenormPreserveFloat32 == rhs.shaderDenormPreserveFloat32) &&
+         (lhs.shaderDenormPreserveFloat64 == rhs.shaderDenormPreserveFloat64) &&
+         (lhs.shaderDenormFlushToZeroFloat16 == rhs.shaderDenormFlushToZeroFloat16) &&
+         (lhs.shaderDenormFlushToZeroFloat32 == rhs.shaderDenormFlushToZeroFloat32) &&
+         (lhs.shaderDenormFlushToZeroFloat64 == rhs.shaderDenormFlushToZeroFloat64) &&
+         (lhs.shaderRoundingModeRTEFloat16 == rhs.shaderRoundingModeRTEFloat16) &&
+         (lhs.shaderRoundingModeRTEFloat32 == rhs.shaderRoundingModeRTEFloat32) &&
+         (lhs.shaderRoundingModeRTEFloat64 == rhs.shaderRoundingModeRTEFloat64) &&
+         (lhs.shaderRoundingModeRTZFloat16 == rhs.shaderRoundingModeRTZFloat16) &&
+         (lhs.shaderRoundingModeRTZFloat32 == rhs.shaderRoundingModeRTZFloat32) &&
+         (lhs.shaderRoundingModeRTZFloat64 == rhs.shaderRoundingModeRTZFloat64) &&
+         (lhs.maxUpdateAfterBindDescriptorsInAllPools == rhs.maxUpdateAfterBindDescriptorsInAllPools) &&
+         (lhs.shaderUniformBufferArrayNonUniformIndexingNative == rhs.shaderUniformBufferArrayNonUniformIndexingNative) &&
+         (lhs.shaderSampledImageArrayNonUniformIndexingNative == rhs.shaderSampledImageArrayNonUniformIndexingNative) &&
+         (lhs.shaderStorageBufferArrayNonUniformIndexingNative == rhs.shaderStorageBufferArrayNonUniformIndexingNative) &&
+         (lhs.shaderStorageImageArrayNonUniformIndexingNative == rhs.shaderStorageImageArrayNonUniformIndexingNative) &&
+         (lhs.shaderInputAttachmentArrayNonUniformIndexingNative == rhs.shaderInputAttachmentArrayNonUniformIndexingNative) &&
+         (lhs.robustBufferAccessUpdateAfterBind == rhs.robustBufferAccessUpdateAfterBind) &&
+         (lhs.quadDivergentImplicitLod == rhs.quadDivergentImplicitLod) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindSamplers == rhs.maxPerStageDescriptorUpdateAfterBindSamplers) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindUniformBuffers == rhs.maxPerStageDescriptorUpdateAfterBindUniformBuffers) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindStorageBuffers == rhs.maxPerStageDescriptorUpdateAfterBindStorageBuffers) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindSampledImages == rhs.maxPerStageDescriptorUpdateAfterBindSampledImages) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindStorageImages == rhs.maxPerStageDescriptorUpdateAfterBindStorageImages) &&
+         (lhs.maxPerStageDescriptorUpdateAfterBindInputAttachments == rhs.maxPerStageDescriptorUpdateAfterBindInputAttachments) &&
+         (lhs.maxPerStageUpdateAfterBindResources == rhs.maxPerStageUpdateAfterBindResources) &&
+         (lhs.maxDescriptorSetUpdateAfterBindSamplers == rhs.maxDescriptorSetUpdateAfterBindSamplers) &&
+         (lhs.maxDescriptorSetUpdateAfterBindUniformBuffers == rhs.maxDescriptorSetUpdateAfterBindUniformBuffers) &&
+         (lhs.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic) &&
+         (lhs.maxDescriptorSetUpdateAfterBindStorageBuffers == rhs.maxDescriptorSetUpdateAfterBindStorageBuffers) &&
+         (lhs.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic) &&
+         (lhs.maxDescriptorSetUpdateAfterBindSampledImages == rhs.maxDescriptorSetUpdateAfterBindSampledImages) &&
+         (lhs.maxDescriptorSetUpdateAfterBindStorageImages == rhs.maxDescriptorSetUpdateAfterBindStorageImages) &&
+         (lhs.maxDescriptorSetUpdateAfterBindInputAttachments == rhs.maxDescriptorSetUpdateAfterBindInputAttachments) &&
+         (lhs.supportedDepthResolveModes == rhs.supportedDepthResolveModes) &&
+         (lhs.supportedStencilResolveModes == rhs.supportedStencilResolveModes) &&
+         (lhs.independentResolveNone == rhs.independentResolveNone) &&
+         (lhs.independentResolve == rhs.independentResolve) &&
+         (lhs.filterMinmaxSingleComponentFormats == rhs.filterMinmaxSingleComponentFormats) &&
+         (lhs.filterMinmaxImageComponentMapping == rhs.filterMinmaxImageComponentMapping) &&
+         (lhs.maxTimelineSemaphoreValueDifference == rhs.maxTimelineSemaphoreValueDifference) &&
+         (lhs.framebufferIntegerColorSampleCounts == rhs.framebufferIntegerColorSampleCounts);
+}
+
+bool operator!=(VkPhysicalDeviceVulkan12Properties const &lhs,
+                VkPhysicalDeviceVulkan12Properties const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineCompilerControlCreateInfoAMD const &lhs,
+                VkPipelineCompilerControlCreateInfoAMD const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.compilerControlFlags == rhs.compilerControlFlags);
+}
+
+bool operator!=(VkPipelineCompilerControlCreateInfoAMD const &lhs,
+                VkPipelineCompilerControlCreateInfoAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceCoherentMemoryFeaturesAMD const &lhs,
+                VkPhysicalDeviceCoherentMemoryFeaturesAMD const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.deviceCoherentMemory == rhs.deviceCoherentMemory);
+}
+
+bool operator!=(VkPhysicalDeviceCoherentMemoryFeaturesAMD const &lhs,
+                VkPhysicalDeviceCoherentMemoryFeaturesAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceToolPropertiesEXT const &lhs,
+                VkPhysicalDeviceToolPropertiesEXT const &rhs) noexcept {
+  for(uint32_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i) {
+    if(lhs.name[i] != rhs.name[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i) {
+    if(lhs.version[i] != rhs.version[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i) {
+    if(lhs.description[i] != rhs.description[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i) {
+    if(lhs.layer[i] != rhs.layer[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.purposes == rhs.purposes);
+}
+
+bool operator!=(VkPhysicalDeviceToolPropertiesEXT const &lhs,
+                VkPhysicalDeviceToolPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceCustomBorderColorPropertiesEXT const &lhs,
+                VkPhysicalDeviceCustomBorderColorPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxCustomBorderColorSamplers == rhs.maxCustomBorderColorSamplers);
+}
+
+bool operator!=(VkPhysicalDeviceCustomBorderColorPropertiesEXT const &lhs,
+                VkPhysicalDeviceCustomBorderColorPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceCustomBorderColorFeaturesEXT const &lhs,
+                VkPhysicalDeviceCustomBorderColorFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.customBorderColors == rhs.customBorderColors) &&
+         (lhs.customBorderColorWithoutFormat == rhs.customBorderColorWithoutFormat);
+}
+
+bool operator!=(VkPhysicalDeviceCustomBorderColorFeaturesEXT const &lhs,
+                VkPhysicalDeviceCustomBorderColorFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSamplerBorderColorComponentMappingCreateInfoEXT const &lhs,
+                VkSamplerBorderColorComponentMappingCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.components == rhs.components) &&
+         (lhs.srgb == rhs.srgb);
+}
+
+bool operator!=(VkSamplerBorderColorComponentMappingCreateInfoEXT const &lhs,
+                VkSamplerBorderColorComponentMappingCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &lhs,
+                VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.borderColorSwizzle == rhs.borderColorSwizzle) &&
+         (lhs.borderColorSwizzleFromImage == rhs.borderColorSwizzleFromImage);
+}
+
+bool operator!=(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &lhs,
+                VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureBuildRangeInfoKHR const &lhs,
+                VkAccelerationStructureBuildRangeInfoKHR const &rhs) noexcept {
+  return (lhs.primitiveCount == rhs.primitiveCount) &&
+         (lhs.primitiveOffset == rhs.primitiveOffset) &&
+         (lhs.firstVertex == rhs.firstVertex) &&
+         (lhs.transformOffset == rhs.transformOffset);
+}
+
+bool operator!=(VkAccelerationStructureBuildRangeInfoKHR const &lhs,
+                VkAccelerationStructureBuildRangeInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureCreateInfoKHR const &lhs,
+                VkAccelerationStructureCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.createFlags == rhs.createFlags) &&
+         (lhs.buffer == rhs.buffer) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.size == rhs.size) &&
+         (lhs.type == rhs.type) &&
+         (lhs.deviceAddress == rhs.deviceAddress);
+}
+
+bool operator!=(VkAccelerationStructureCreateInfoKHR const &lhs,
+                VkAccelerationStructureCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAabbPositionsKHR const &lhs,
+                VkAabbPositionsKHR const &rhs) noexcept {
+  return (lhs.minX == rhs.minX) &&
+         (lhs.minY == rhs.minY) &&
+         (lhs.minZ == rhs.minZ) &&
+         (lhs.maxX == rhs.maxX) &&
+         (lhs.maxY == rhs.maxY) &&
+         (lhs.maxZ == rhs.maxZ);
+}
+
+bool operator!=(VkAabbPositionsKHR const &lhs,
+                VkAabbPositionsKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkTransformMatrixKHR const &lhs,
+                VkTransformMatrixKHR const &rhs) noexcept {
+  for(uint32_t i = 0; i < 3; ++i) {
+  for(uint32_t j = 0; j < 4; ++j) {
+    if(lhs.matrix[i][j] != rhs.matrix[i][j])
+      return false;
+  }
+  }
+
+  return true;
+}
+
+bool operator!=(VkTransformMatrixKHR const &lhs,
+                VkTransformMatrixKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureInstanceKHR const &lhs,
+                VkAccelerationStructureInstanceKHR const &rhs) noexcept {
+  return (lhs.transform == rhs.transform) &&
+         (lhs.instanceCustomIndex == rhs.instanceCustomIndex) &&
+         (lhs.mask == rhs.mask) &&
+         (lhs.instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.accelerationStructureReference == rhs.accelerationStructureReference);
+}
+
+bool operator!=(VkAccelerationStructureInstanceKHR const &lhs,
+                VkAccelerationStructureInstanceKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureDeviceAddressInfoKHR const &lhs,
+                VkAccelerationStructureDeviceAddressInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.accelerationStructure == rhs.accelerationStructure);
+}
+
+bool operator!=(VkAccelerationStructureDeviceAddressInfoKHR const &lhs,
+                VkAccelerationStructureDeviceAddressInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureVersionInfoKHR const &lhs,
+                VkAccelerationStructureVersionInfoKHR const &rhs) noexcept {
+  if(lhs.VK\_UUID\_SIZE != rhs.VK\_UUID\_SIZE)
+    return false;
+
+  for(uint32_t i = 0; i < 2*VK_UUID_SIZE; ++i) {
+    if(lhs.pVersionData[i] != rhs.pVersionData[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkAccelerationStructureVersionInfoKHR const &lhs,
+                VkAccelerationStructureVersionInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCopyAccelerationStructureInfoKHR const &lhs,
+                VkCopyAccelerationStructureInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.src == rhs.src) &&
+         (lhs.dst == rhs.dst) &&
+         (lhs.mode == rhs.mode);
+}
+
+bool operator!=(VkCopyAccelerationStructureInfoKHR const &lhs,
+                VkCopyAccelerationStructureInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRayTracingPipelineInterfaceCreateInfoKHR const &lhs,
+                VkRayTracingPipelineInterfaceCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxPipelineRayPayloadSize == rhs.maxPipelineRayPayloadSize) &&
+         (lhs.maxPipelineRayHitAttributeSize == rhs.maxPipelineRayHitAttributeSize);
+}
+
+bool operator!=(VkRayTracingPipelineInterfaceCreateInfoKHR const &lhs,
+                VkRayTracingPipelineInterfaceCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineLibraryCreateInfoKHR const &lhs,
+                VkPipelineLibraryCreateInfoKHR const &rhs) noexcept {
+  if(lhs.libraryCount != rhs.libraryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.libraryCount; ++i) {
+    if(lhs.pLibraries[i] != rhs.pLibraries[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkPipelineLibraryCreateInfoKHR const &lhs,
+                VkPipelineLibraryCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &lhs,
+                VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.extendedDynamicState == rhs.extendedDynamicState);
+}
+
+bool operator!=(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &lhs,
+                VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &lhs,
+                VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.extendedDynamicState2 == rhs.extendedDynamicState2) &&
+         (lhs.extendedDynamicState2LogicOp == rhs.extendedDynamicState2LogicOp) &&
+         (lhs.extendedDynamicState2PatchControlPoints == rhs.extendedDynamicState2PatchControlPoints);
+}
+
+bool operator!=(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &lhs,
+                VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderPassTransformBeginInfoQCOM const &lhs,
+                VkRenderPassTransformBeginInfoQCOM const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.transform == rhs.transform);
+}
+
+bool operator!=(VkRenderPassTransformBeginInfoQCOM const &lhs,
+                VkRenderPassTransformBeginInfoQCOM const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCopyCommandTransformInfoQCOM const &lhs,
+                VkCopyCommandTransformInfoQCOM const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.transform == rhs.transform);
+}
+
+bool operator!=(VkCopyCommandTransformInfoQCOM const &lhs,
+                VkCopyCommandTransformInfoQCOM const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &lhs,
+                VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.transform == rhs.transform) &&
+         (lhs.renderArea == rhs.renderArea);
+}
+
+bool operator!=(VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &lhs,
+                VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &lhs,
+                VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.diagnosticsConfig == rhs.diagnosticsConfig);
+}
+
+bool operator!=(VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &lhs,
+                VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDeviceDiagnosticsConfigCreateInfoNV const &lhs,
+                VkDeviceDiagnosticsConfigCreateInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkDeviceDiagnosticsConfigCreateInfoNV const &lhs,
+                VkDeviceDiagnosticsConfigCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const &lhs,
+                VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderZeroInitializeWorkgroupMemory == rhs.shaderZeroInitializeWorkgroupMemory);
+}
+
+bool operator!=(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const &lhs,
+                VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderSubgroupUniformControlFlow == rhs.shaderSubgroupUniformControlFlow);
+}
+
+bool operator!=(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceRobustness2FeaturesEXT const &lhs,
+                VkPhysicalDeviceRobustness2FeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.robustBufferAccess2 == rhs.robustBufferAccess2) &&
+         (lhs.robustImageAccess2 == rhs.robustImageAccess2) &&
+         (lhs.nullDescriptor == rhs.nullDescriptor);
+}
+
+bool operator!=(VkPhysicalDeviceRobustness2FeaturesEXT const &lhs,
+                VkPhysicalDeviceRobustness2FeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceRobustness2PropertiesEXT const &lhs,
+                VkPhysicalDeviceRobustness2PropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.robustStorageBufferAccessSizeAlignment == rhs.robustStorageBufferAccessSizeAlignment) &&
+         (lhs.robustUniformBufferAccessSizeAlignment == rhs.robustUniformBufferAccessSizeAlignment);
+}
+
+bool operator!=(VkPhysicalDeviceRobustness2PropertiesEXT const &lhs,
+                VkPhysicalDeviceRobustness2PropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceImageRobustnessFeaturesEXT const &lhs,
+                VkPhysicalDeviceImageRobustnessFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.robustImageAccess == rhs.robustImageAccess);
+}
+
+bool operator!=(VkPhysicalDeviceImageRobustnessFeaturesEXT const &lhs,
+                VkPhysicalDeviceImageRobustnessFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &lhs,
+                VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.workgroupMemoryExplicitLayout == rhs.workgroupMemoryExplicitLayout) &&
+         (lhs.workgroupMemoryExplicitLayoutScalarBlockLayout == rhs.workgroupMemoryExplicitLayoutScalarBlockLayout) &&
+         (lhs.workgroupMemoryExplicitLayout8BitAccess == rhs.workgroupMemoryExplicitLayout8BitAccess) &&
+         (lhs.workgroupMemoryExplicitLayout16BitAccess == rhs.workgroupMemoryExplicitLayout16BitAccess);
+}
+
+bool operator!=(VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &lhs,
+                VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkPhysicalDevicePortabilitySubsetFeaturesKHR const &lhs,
+                VkPhysicalDevicePortabilitySubsetFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.constantAlphaColorBlendFactors == rhs.constantAlphaColorBlendFactors) &&
+         (lhs.events == rhs.events) &&
+         (lhs.imageViewFormatReinterpretation == rhs.imageViewFormatReinterpretation) &&
+         (lhs.imageViewFormatSwizzle == rhs.imageViewFormatSwizzle) &&
+         (lhs.imageView2DOn3DImage == rhs.imageView2DOn3DImage) &&
+         (lhs.multisampleArrayImage == rhs.multisampleArrayImage) &&
+         (lhs.mutableComparisonSamplers == rhs.mutableComparisonSamplers) &&
+         (lhs.pointPolygons == rhs.pointPolygons) &&
+         (lhs.samplerMipLodBias == rhs.samplerMipLodBias) &&
+         (lhs.separateStencilMaskRef == rhs.separateStencilMaskRef) &&
+         (lhs.shaderSampleRateInterpolationFunctions == rhs.shaderSampleRateInterpolationFunctions) &&
+         (lhs.tessellationIsolines == rhs.tessellationIsolines) &&
+         (lhs.tessellationPointMode == rhs.tessellationPointMode) &&
+         (lhs.triangleFans == rhs.triangleFans) &&
+         (lhs.vertexAttributeAccessBeyondStride == rhs.vertexAttributeAccessBeyondStride);
+}
+
+bool operator!=(VkPhysicalDevicePortabilitySubsetFeaturesKHR const &lhs,
+                VkPhysicalDevicePortabilitySubsetFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkPhysicalDevicePortabilitySubsetPropertiesKHR const &lhs,
+                VkPhysicalDevicePortabilitySubsetPropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.minVertexInputBindingStrideAlignment == rhs.minVertexInputBindingStrideAlignment);
+}
+
+bool operator!=(VkPhysicalDevicePortabilitySubsetPropertiesKHR const &lhs,
+                VkPhysicalDevicePortabilitySubsetPropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+bool operator==(VkPhysicalDevice4444FormatsFeaturesEXT const &lhs,
+                VkPhysicalDevice4444FormatsFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.formatA4R4G4B4 == rhs.formatA4R4G4B4) &&
+         (lhs.formatA4B4G4R4 == rhs.formatA4B4G4R4);
+}
+
+bool operator!=(VkPhysicalDevice4444FormatsFeaturesEXT const &lhs,
+                VkPhysicalDevice4444FormatsFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &lhs,
+                VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.subpassShading == rhs.subpassShading);
+}
+
+bool operator!=(VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &lhs,
+                VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferCopy2KHR const &lhs,
+                VkBufferCopy2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcOffset == rhs.srcOffset) &&
+         (lhs.dstOffset == rhs.dstOffset) &&
+         (lhs.size == rhs.size);
+}
+
+bool operator!=(VkBufferCopy2KHR const &lhs,
+                VkBufferCopy2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageCopy2KHR const &lhs,
+                VkImageCopy2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcSubresource == rhs.srcSubresource) &&
+         (lhs.srcOffset == rhs.srcOffset) &&
+         (lhs.dstSubresource == rhs.dstSubresource) &&
+         (lhs.dstOffset == rhs.dstOffset) &&
+         (lhs.extent == rhs.extent);
+}
+
+bool operator!=(VkImageCopy2KHR const &lhs,
+                VkImageCopy2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageBlit2KHR const &lhs,
+                VkImageBlit2KHR const &rhs) noexcept {
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.srcOffsets[i] != rhs.srcOffsets[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.dstOffsets[i] != rhs.dstOffsets[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcSubresource == rhs.srcSubresource) &&
+         (lhs.dstSubresource == rhs.dstSubresource);
+}
+
+bool operator!=(VkImageBlit2KHR const &lhs,
+                VkImageBlit2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferImageCopy2KHR const &lhs,
+                VkBufferImageCopy2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.bufferOffset == rhs.bufferOffset) &&
+         (lhs.bufferRowLength == rhs.bufferRowLength) &&
+         (lhs.bufferImageHeight == rhs.bufferImageHeight) &&
+         (lhs.imageSubresource == rhs.imageSubresource) &&
+         (lhs.imageOffset == rhs.imageOffset) &&
+         (lhs.imageExtent == rhs.imageExtent);
+}
+
+bool operator!=(VkBufferImageCopy2KHR const &lhs,
+                VkBufferImageCopy2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageResolve2KHR const &lhs,
+                VkImageResolve2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcSubresource == rhs.srcSubresource) &&
+         (lhs.srcOffset == rhs.srcOffset) &&
+         (lhs.dstSubresource == rhs.dstSubresource) &&
+         (lhs.dstOffset == rhs.dstOffset) &&
+         (lhs.extent == rhs.extent);
+}
+
+bool operator!=(VkImageResolve2KHR const &lhs,
+                VkImageResolve2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCopyBufferInfo2KHR const &lhs,
+                VkCopyBufferInfo2KHR const &rhs) noexcept {
+  if(lhs.regionCount != rhs.regionCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.regionCount; ++i) {
+    if(lhs.pRegions[i] != rhs.pRegions[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcBuffer == rhs.srcBuffer) &&
+         (lhs.dstBuffer == rhs.dstBuffer);
+}
+
+bool operator!=(VkCopyBufferInfo2KHR const &lhs,
+                VkCopyBufferInfo2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCopyImageInfo2KHR const &lhs,
+                VkCopyImageInfo2KHR const &rhs) noexcept {
+  if(lhs.regionCount != rhs.regionCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.regionCount; ++i) {
+    if(lhs.pRegions[i] != rhs.pRegions[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcImage == rhs.srcImage) &&
+         (lhs.srcImageLayout == rhs.srcImageLayout) &&
+         (lhs.dstImage == rhs.dstImage) &&
+         (lhs.dstImageLayout == rhs.dstImageLayout);
+}
+
+bool operator!=(VkCopyImageInfo2KHR const &lhs,
+                VkCopyImageInfo2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBlitImageInfo2KHR const &lhs,
+                VkBlitImageInfo2KHR const &rhs) noexcept {
+  if(lhs.regionCount != rhs.regionCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.regionCount; ++i) {
+    if(lhs.pRegions[i] != rhs.pRegions[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcImage == rhs.srcImage) &&
+         (lhs.srcImageLayout == rhs.srcImageLayout) &&
+         (lhs.dstImage == rhs.dstImage) &&
+         (lhs.dstImageLayout == rhs.dstImageLayout) &&
+         (lhs.filter == rhs.filter);
+}
+
+bool operator!=(VkBlitImageInfo2KHR const &lhs,
+                VkBlitImageInfo2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCopyBufferToImageInfo2KHR const &lhs,
+                VkCopyBufferToImageInfo2KHR const &rhs) noexcept {
+  if(lhs.regionCount != rhs.regionCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.regionCount; ++i) {
+    if(lhs.pRegions[i] != rhs.pRegions[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcBuffer == rhs.srcBuffer) &&
+         (lhs.dstImage == rhs.dstImage) &&
+         (lhs.dstImageLayout == rhs.dstImageLayout);
+}
+
+bool operator!=(VkCopyBufferToImageInfo2KHR const &lhs,
+                VkCopyBufferToImageInfo2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCopyImageToBufferInfo2KHR const &lhs,
+                VkCopyImageToBufferInfo2KHR const &rhs) noexcept {
+  if(lhs.regionCount != rhs.regionCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.regionCount; ++i) {
+    if(lhs.pRegions[i] != rhs.pRegions[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcImage == rhs.srcImage) &&
+         (lhs.srcImageLayout == rhs.srcImageLayout) &&
+         (lhs.dstBuffer == rhs.dstBuffer);
+}
+
+bool operator!=(VkCopyImageToBufferInfo2KHR const &lhs,
+                VkCopyImageToBufferInfo2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkResolveImageInfo2KHR const &lhs,
+                VkResolveImageInfo2KHR const &rhs) noexcept {
+  if(lhs.regionCount != rhs.regionCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.regionCount; ++i) {
+    if(lhs.pRegions[i] != rhs.pRegions[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcImage == rhs.srcImage) &&
+         (lhs.srcImageLayout == rhs.srcImageLayout) &&
+         (lhs.dstImage == rhs.dstImage) &&
+         (lhs.dstImageLayout == rhs.dstImageLayout);
+}
+
+bool operator!=(VkResolveImageInfo2KHR const &lhs,
+                VkResolveImageInfo2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderImageInt64Atomics == rhs.shaderImageInt64Atomics) &&
+         (lhs.sparseImageInt64Atomics == rhs.sparseImageInt64Atomics);
+}
+
+bool operator!=(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &lhs,
+                VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFragmentShadingRateAttachmentInfoKHR const &lhs,
+                VkFragmentShadingRateAttachmentInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pFragmentShadingRateAttachment == rhs.pFragmentShadingRateAttachment) &&
+         (lhs.shadingRateAttachmentTexelSize == rhs.shadingRateAttachmentTexelSize);
+}
+
+bool operator!=(VkFragmentShadingRateAttachmentInfoKHR const &lhs,
+                VkFragmentShadingRateAttachmentInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineFragmentShadingRateStateCreateInfoKHR const &lhs,
+                VkPipelineFragmentShadingRateStateCreateInfoKHR const &rhs) noexcept {
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.combinerOps[i] != rhs.combinerOps[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fragmentSize == rhs.fragmentSize);
+}
+
+bool operator!=(VkPipelineFragmentShadingRateStateCreateInfoKHR const &lhs,
+                VkPipelineFragmentShadingRateStateCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pipelineFragmentShadingRate == rhs.pipelineFragmentShadingRate) &&
+         (lhs.primitiveFragmentShadingRate == rhs.primitiveFragmentShadingRate) &&
+         (lhs.attachmentFragmentShadingRate == rhs.attachmentFragmentShadingRate);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.minFragmentShadingRateAttachmentTexelSize == rhs.minFragmentShadingRateAttachmentTexelSize) &&
+         (lhs.maxFragmentShadingRateAttachmentTexelSize == rhs.maxFragmentShadingRateAttachmentTexelSize) &&
+         (lhs.maxFragmentShadingRateAttachmentTexelSizeAspectRatio == rhs.maxFragmentShadingRateAttachmentTexelSizeAspectRatio) &&
+         (lhs.primitiveFragmentShadingRateWithMultipleViewports == rhs.primitiveFragmentShadingRateWithMultipleViewports) &&
+         (lhs.layeredShadingRateAttachments == rhs.layeredShadingRateAttachments) &&
+         (lhs.fragmentShadingRateNonTrivialCombinerOps == rhs.fragmentShadingRateNonTrivialCombinerOps) &&
+         (lhs.maxFragmentSize == rhs.maxFragmentSize) &&
+         (lhs.maxFragmentSizeAspectRatio == rhs.maxFragmentSizeAspectRatio) &&
+         (lhs.maxFragmentShadingRateCoverageSamples == rhs.maxFragmentShadingRateCoverageSamples) &&
+         (lhs.maxFragmentShadingRateRasterizationSamples == rhs.maxFragmentShadingRateRasterizationSamples) &&
+         (lhs.fragmentShadingRateWithShaderDepthStencilWrites == rhs.fragmentShadingRateWithShaderDepthStencilWrites) &&
+         (lhs.fragmentShadingRateWithSampleMask == rhs.fragmentShadingRateWithSampleMask) &&
+         (lhs.fragmentShadingRateWithShaderSampleMask == rhs.fragmentShadingRateWithShaderSampleMask) &&
+         (lhs.fragmentShadingRateWithConservativeRasterization == rhs.fragmentShadingRateWithConservativeRasterization) &&
+         (lhs.fragmentShadingRateWithFragmentShaderInterlock == rhs.fragmentShadingRateWithFragmentShaderInterlock) &&
+         (lhs.fragmentShadingRateWithCustomSampleLocations == rhs.fragmentShadingRateWithCustomSampleLocations) &&
+         (lhs.fragmentShadingRateStrictMultiplyCombiner == rhs.fragmentShadingRateStrictMultiplyCombiner);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentShadingRateKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRateKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.sampleCounts == rhs.sampleCounts) &&
+         (lhs.fragmentSize == rhs.fragmentSize);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentShadingRateKHR const &lhs,
+                VkPhysicalDeviceFragmentShadingRateKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderTerminateInvocation == rhs.shaderTerminateInvocation);
+}
+
+bool operator!=(VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &lhs,
+                VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.fragmentShadingRateEnums == rhs.fragmentShadingRateEnums) &&
+         (lhs.supersampleFragmentShadingRates == rhs.supersampleFragmentShadingRates) &&
+         (lhs.noInvocationFragmentShadingRates == rhs.noInvocationFragmentShadingRates);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &lhs,
+                VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &lhs,
+                VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxFragmentShadingRateInvocationCount == rhs.maxFragmentShadingRateInvocationCount);
+}
+
+bool operator!=(VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &lhs,
+                VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &lhs,
+                VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &rhs) noexcept {
+  for(uint32_t i = 0; i < 2; ++i) {
+    if(lhs.combinerOps[i] != rhs.combinerOps[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shadingRateType == rhs.shadingRateType) &&
+         (lhs.shadingRate == rhs.shadingRate);
+}
+
+bool operator!=(VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &lhs,
+                VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureBuildSizesInfoKHR const &lhs,
+                VkAccelerationStructureBuildSizesInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.accelerationStructureSize == rhs.accelerationStructureSize) &&
+         (lhs.updateScratchSize == rhs.updateScratchSize) &&
+         (lhs.buildScratchSize == rhs.buildScratchSize);
+}
+
+bool operator!=(VkAccelerationStructureBuildSizesInfoKHR const &lhs,
+                VkAccelerationStructureBuildSizesInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &lhs,
+                VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.mutableDescriptorType == rhs.mutableDescriptorType);
+}
+
+bool operator!=(VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &lhs,
+                VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMutableDescriptorTypeListVALVE const &lhs,
+                VkMutableDescriptorTypeListVALVE const &rhs) noexcept {
+  if(lhs.descriptorTypeCount != rhs.descriptorTypeCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.descriptorTypeCount; ++i) {
+    if(lhs.pDescriptorTypes[i] != rhs.pDescriptorTypes[i])
+      return false;
+  }
+
+  return true;
+}
+
+bool operator!=(VkMutableDescriptorTypeListVALVE const &lhs,
+                VkMutableDescriptorTypeListVALVE const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMutableDescriptorTypeCreateInfoVALVE const &lhs,
+                VkMutableDescriptorTypeCreateInfoVALVE const &rhs) noexcept {
+  if(lhs.mutableDescriptorTypeListCount != rhs.mutableDescriptorTypeListCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.mutableDescriptorTypeListCount; ++i) {
+    if(lhs.pMutableDescriptorTypeLists[i] != rhs.pMutableDescriptorTypeLists[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkMutableDescriptorTypeCreateInfoVALVE const &lhs,
+                VkMutableDescriptorTypeCreateInfoVALVE const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &lhs,
+                VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.vertexInputDynamicState == rhs.vertexInputDynamicState);
+}
+
+bool operator!=(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &lhs,
+                VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &lhs,
+                VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.externalMemoryRDMA == rhs.externalMemoryRDMA);
+}
+
+bool operator!=(VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &lhs,
+                VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkVertexInputBindingDescription2EXT const &lhs,
+                VkVertexInputBindingDescription2EXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.binding == rhs.binding) &&
+         (lhs.stride == rhs.stride) &&
+         (lhs.inputRate == rhs.inputRate) &&
+         (lhs.divisor == rhs.divisor);
+}
+
+bool operator!=(VkVertexInputBindingDescription2EXT const &lhs,
+                VkVertexInputBindingDescription2EXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkVertexInputAttributeDescription2EXT const &lhs,
+                VkVertexInputAttributeDescription2EXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.location == rhs.location) &&
+         (lhs.binding == rhs.binding) &&
+         (lhs.format == rhs.format) &&
+         (lhs.offset == rhs.offset);
+}
+
+bool operator!=(VkVertexInputAttributeDescription2EXT const &lhs,
+                VkVertexInputAttributeDescription2EXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceColorWriteEnableFeaturesEXT const &lhs,
+                VkPhysicalDeviceColorWriteEnableFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.colorWriteEnable == rhs.colorWriteEnable);
+}
+
+bool operator!=(VkPhysicalDeviceColorWriteEnableFeaturesEXT const &lhs,
+                VkPhysicalDeviceColorWriteEnableFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineColorWriteCreateInfoEXT const &lhs,
+                VkPipelineColorWriteCreateInfoEXT const &rhs) noexcept {
+  if(lhs.attachmentCount != rhs.attachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.attachmentCount; ++i) {
+    if(lhs.pColorWriteEnables[i] != rhs.pColorWriteEnables[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkPipelineColorWriteCreateInfoEXT const &lhs,
+                VkPipelineColorWriteCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryBarrier2KHR const &lhs,
+                VkMemoryBarrier2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcStageMask == rhs.srcStageMask) &&
+         (lhs.srcAccessMask == rhs.srcAccessMask) &&
+         (lhs.dstStageMask == rhs.dstStageMask) &&
+         (lhs.dstAccessMask == rhs.dstAccessMask);
+}
+
+bool operator!=(VkMemoryBarrier2KHR const &lhs,
+                VkMemoryBarrier2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkImageMemoryBarrier2KHR const &lhs,
+                VkImageMemoryBarrier2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcStageMask == rhs.srcStageMask) &&
+         (lhs.srcAccessMask == rhs.srcAccessMask) &&
+         (lhs.dstStageMask == rhs.dstStageMask) &&
+         (lhs.dstAccessMask == rhs.dstAccessMask) &&
+         (lhs.oldLayout == rhs.oldLayout) &&
+         (lhs.newLayout == rhs.newLayout) &&
+         (lhs.srcQueueFamilyIndex == rhs.srcQueueFamilyIndex) &&
+         (lhs.dstQueueFamilyIndex == rhs.dstQueueFamilyIndex) &&
+         (lhs.image == rhs.image) &&
+         (lhs.subresourceRange == rhs.subresourceRange);
+}
+
+bool operator!=(VkImageMemoryBarrier2KHR const &lhs,
+                VkImageMemoryBarrier2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkBufferMemoryBarrier2KHR const &lhs,
+                VkBufferMemoryBarrier2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.srcStageMask == rhs.srcStageMask) &&
+         (lhs.srcAccessMask == rhs.srcAccessMask) &&
+         (lhs.dstStageMask == rhs.dstStageMask) &&
+         (lhs.dstAccessMask == rhs.dstAccessMask) &&
+         (lhs.srcQueueFamilyIndex == rhs.srcQueueFamilyIndex) &&
+         (lhs.dstQueueFamilyIndex == rhs.dstQueueFamilyIndex) &&
+         (lhs.buffer == rhs.buffer) &&
+         (lhs.offset == rhs.offset) &&
+         (lhs.size == rhs.size);
+}
+
+bool operator!=(VkBufferMemoryBarrier2KHR const &lhs,
+                VkBufferMemoryBarrier2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDependencyInfoKHR const &lhs,
+                VkDependencyInfoKHR const &rhs) noexcept {
+  if(lhs.memoryBarrierCount != rhs.memoryBarrierCount)
+    return false;
+
+  if(lhs.bufferMemoryBarrierCount != rhs.bufferMemoryBarrierCount)
+    return false;
+
+  if(lhs.imageMemoryBarrierCount != rhs.imageMemoryBarrierCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.memoryBarrierCount; ++i) {
+    if(lhs.pMemoryBarriers[i] != rhs.pMemoryBarriers[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.bufferMemoryBarrierCount; ++i) {
+    if(lhs.pBufferMemoryBarriers[i] != rhs.pBufferMemoryBarriers[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.imageMemoryBarrierCount; ++i) {
+    if(lhs.pImageMemoryBarriers[i] != rhs.pImageMemoryBarriers[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.dependencyFlags == rhs.dependencyFlags);
+}
+
+bool operator!=(VkDependencyInfoKHR const &lhs,
+                VkDependencyInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSemaphoreSubmitInfoKHR const &lhs,
+                VkSemaphoreSubmitInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.semaphore == rhs.semaphore) &&
+         (lhs.value == rhs.value) &&
+         (lhs.stageMask == rhs.stageMask) &&
+         (lhs.deviceIndex == rhs.deviceIndex);
+}
+
+bool operator!=(VkSemaphoreSubmitInfoKHR const &lhs,
+                VkSemaphoreSubmitInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCommandBufferSubmitInfoKHR const &lhs,
+                VkCommandBufferSubmitInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.commandBuffer == rhs.commandBuffer) &&
+         (lhs.deviceMask == rhs.deviceMask);
+}
+
+bool operator!=(VkCommandBufferSubmitInfoKHR const &lhs,
+                VkCommandBufferSubmitInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSubmitInfo2KHR const &lhs,
+                VkSubmitInfo2KHR const &rhs) noexcept {
+  if(lhs.waitSemaphoreInfoCount != rhs.waitSemaphoreInfoCount)
+    return false;
+
+  if(lhs.commandBufferInfoCount != rhs.commandBufferInfoCount)
+    return false;
+
+  if(lhs.signalSemaphoreInfoCount != rhs.signalSemaphoreInfoCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.waitSemaphoreInfoCount; ++i) {
+    if(lhs.pWaitSemaphoreInfos[i] != rhs.pWaitSemaphoreInfos[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.commandBufferInfoCount; ++i) {
+    if(lhs.pCommandBufferInfos[i] != rhs.pCommandBufferInfos[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.signalSemaphoreInfoCount; ++i) {
+    if(lhs.pSignalSemaphoreInfos[i] != rhs.pSignalSemaphoreInfos[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkSubmitInfo2KHR const &lhs,
+                VkSubmitInfo2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkQueueFamilyCheckpointProperties2NV const &lhs,
+                VkQueueFamilyCheckpointProperties2NV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.checkpointExecutionStageMask == rhs.checkpointExecutionStageMask);
+}
+
+bool operator!=(VkQueueFamilyCheckpointProperties2NV const &lhs,
+                VkQueueFamilyCheckpointProperties2NV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCheckpointData2NV const &lhs,
+                VkCheckpointData2NV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stage == rhs.stage) &&
+         (lhs.pCheckpointMarker == rhs.pCheckpointMarker);
+}
+
+bool operator!=(VkCheckpointData2NV const &lhs,
+                VkCheckpointData2NV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceSynchronization2FeaturesKHR const &lhs,
+                VkPhysicalDeviceSynchronization2FeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.synchronization2 == rhs.synchronization2);
+}
+
+bool operator!=(VkPhysicalDeviceSynchronization2FeaturesKHR const &lhs,
+                VkPhysicalDeviceSynchronization2FeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoQueueFamilyProperties2KHR const &lhs,
+                VkVideoQueueFamilyProperties2KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.videoCodecOperations == rhs.videoCodecOperations);
+}
+
+bool operator!=(VkVideoQueueFamilyProperties2KHR const &lhs,
+                VkVideoQueueFamilyProperties2KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoProfilesKHR const &lhs,
+                VkVideoProfilesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.profileCount == rhs.profileCount) &&
+         (lhs.pProfiles == rhs.pProfiles);
+}
+
+bool operator!=(VkVideoProfilesKHR const &lhs,
+                VkVideoProfilesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkPhysicalDeviceVideoFormatInfoKHR const &lhs,
+                VkPhysicalDeviceVideoFormatInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.imageUsage == rhs.imageUsage) &&
+         (lhs.pVideoProfiles == rhs.pVideoProfiles);
+}
+
+bool operator!=(VkPhysicalDeviceVideoFormatInfoKHR const &lhs,
+                VkPhysicalDeviceVideoFormatInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoFormatPropertiesKHR const &lhs,
+                VkVideoFormatPropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.format == rhs.format);
+}
+
+bool operator!=(VkVideoFormatPropertiesKHR const &lhs,
+                VkVideoFormatPropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoProfileKHR const &lhs,
+                VkVideoProfileKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.videoCodecOperation == rhs.videoCodecOperation) &&
+         (lhs.chromaSubsampling == rhs.chromaSubsampling) &&
+         (lhs.lumaBitDepth == rhs.lumaBitDepth) &&
+         (lhs.chromaBitDepth == rhs.chromaBitDepth);
+}
+
+bool operator!=(VkVideoProfileKHR const &lhs,
+                VkVideoProfileKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoCapabilitiesKHR const &lhs,
+                VkVideoCapabilitiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.capabilityFlags == rhs.capabilityFlags) &&
+         (lhs.minBitstreamBufferOffsetAlignment == rhs.minBitstreamBufferOffsetAlignment) &&
+         (lhs.minBitstreamBufferSizeAlignment == rhs.minBitstreamBufferSizeAlignment) &&
+         (lhs.videoPictureExtentGranularity == rhs.videoPictureExtentGranularity) &&
+         (lhs.minExtent == rhs.minExtent) &&
+         (lhs.maxExtent == rhs.maxExtent) &&
+         (lhs.maxReferencePicturesSlotsCount == rhs.maxReferencePicturesSlotsCount) &&
+         (lhs.maxReferencePicturesActiveCount == rhs.maxReferencePicturesActiveCount);
+}
+
+bool operator!=(VkVideoCapabilitiesKHR const &lhs,
+                VkVideoCapabilitiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoGetMemoryPropertiesKHR const &lhs,
+                VkVideoGetMemoryPropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryBindIndex == rhs.memoryBindIndex) &&
+         (lhs.pMemoryRequirements == rhs.pMemoryRequirements);
+}
+
+bool operator!=(VkVideoGetMemoryPropertiesKHR const &lhs,
+                VkVideoGetMemoryPropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoBindMemoryKHR const &lhs,
+                VkVideoBindMemoryKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryBindIndex == rhs.memoryBindIndex) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.memoryOffset == rhs.memoryOffset) &&
+         (lhs.memorySize == rhs.memorySize);
+}
+
+bool operator!=(VkVideoBindMemoryKHR const &lhs,
+                VkVideoBindMemoryKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoPictureResourceKHR const &lhs,
+                VkVideoPictureResourceKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.codedOffset == rhs.codedOffset) &&
+         (lhs.codedExtent == rhs.codedExtent) &&
+         (lhs.baseArrayLayer == rhs.baseArrayLayer) &&
+         (lhs.imageViewBinding == rhs.imageViewBinding);
+}
+
+bool operator!=(VkVideoPictureResourceKHR const &lhs,
+                VkVideoPictureResourceKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoReferenceSlotKHR const &lhs,
+                VkVideoReferenceSlotKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.slotIndex == rhs.slotIndex) &&
+         (lhs.pPictureResource == rhs.pPictureResource);
+}
+
+bool operator!=(VkVideoReferenceSlotKHR const &lhs,
+                VkVideoReferenceSlotKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeInfoKHR const &lhs,
+                VkVideoDecodeInfoKHR const &rhs) noexcept {
+  if(lhs.referenceSlotCount != rhs.referenceSlotCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.referenceSlotCount; ++i) {
+    if(lhs.pReferenceSlots[i] != rhs.pReferenceSlots[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.codedOffset == rhs.codedOffset) &&
+         (lhs.codedExtent == rhs.codedExtent) &&
+         (lhs.srcBuffer == rhs.srcBuffer) &&
+         (lhs.srcBufferOffset == rhs.srcBufferOffset) &&
+         (lhs.srcBufferRange == rhs.srcBufferRange) &&
+         (lhs.dstPictureResource == rhs.dstPictureResource) &&
+         (lhs.pSetupReferenceSlot == rhs.pSetupReferenceSlot);
+}
+
+bool operator!=(VkVideoDecodeInfoKHR const &lhs,
+                VkVideoDecodeInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264ProfileEXT const &lhs,
+                VkVideoDecodeH264ProfileEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stdProfileIdc == rhs.stdProfileIdc) &&
+         (lhs.pictureLayout == rhs.pictureLayout);
+}
+
+bool operator!=(VkVideoDecodeH264ProfileEXT const &lhs,
+                VkVideoDecodeH264ProfileEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264CapabilitiesEXT const &lhs,
+                VkVideoDecodeH264CapabilitiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxLevel == rhs.maxLevel) &&
+         (lhs.fieldOffsetGranularity == rhs.fieldOffsetGranularity) &&
+         (lhs.stdExtensionVersion == rhs.stdExtensionVersion);
+}
+
+bool operator!=(VkVideoDecodeH264CapabilitiesEXT const &lhs,
+                VkVideoDecodeH264CapabilitiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264SessionCreateInfoEXT const &lhs,
+                VkVideoDecodeH264SessionCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pStdExtensionVersion == rhs.pStdExtensionVersion);
+}
+
+bool operator!=(VkVideoDecodeH264SessionCreateInfoEXT const &lhs,
+                VkVideoDecodeH264SessionCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264SessionParametersAddInfoEXT const &lhs,
+                VkVideoDecodeH264SessionParametersAddInfoEXT const &rhs) noexcept {
+  if(lhs.spsStdCount != rhs.spsStdCount)
+    return false;
+
+  if(lhs.ppsStdCount != rhs.ppsStdCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.spsStdCount; ++i) {
+    if(lhs.pSpsStd[i] != rhs.pSpsStd[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.ppsStdCount; ++i) {
+    if(lhs.pPpsStd[i] != rhs.pPpsStd[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkVideoDecodeH264SessionParametersAddInfoEXT const &lhs,
+                VkVideoDecodeH264SessionParametersAddInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264SessionParametersCreateInfoEXT const &lhs,
+                VkVideoDecodeH264SessionParametersCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxSpsStdCount == rhs.maxSpsStdCount) &&
+         (lhs.maxPpsStdCount == rhs.maxPpsStdCount) &&
+         (lhs.pParametersAddInfo == rhs.pParametersAddInfo);
+}
+
+bool operator!=(VkVideoDecodeH264SessionParametersCreateInfoEXT const &lhs,
+                VkVideoDecodeH264SessionParametersCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264PictureInfoEXT const &lhs,
+                VkVideoDecodeH264PictureInfoEXT const &rhs) noexcept {
+  if(lhs.slicesCount != rhs.slicesCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.slicesCount; ++i) {
+    if(lhs.pSlicesDataOffsets[i] != rhs.pSlicesDataOffsets[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pStdPictureInfo == rhs.pStdPictureInfo);
+}
+
+bool operator!=(VkVideoDecodeH264PictureInfoEXT const &lhs,
+                VkVideoDecodeH264PictureInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264DpbSlotInfoEXT const &lhs,
+                VkVideoDecodeH264DpbSlotInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pStdReferenceInfo == rhs.pStdReferenceInfo);
+}
+
+bool operator!=(VkVideoDecodeH264DpbSlotInfoEXT const &lhs,
+                VkVideoDecodeH264DpbSlotInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH264MvcEXT const &lhs,
+                VkVideoDecodeH264MvcEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pStdMvc == rhs.pStdMvc);
+}
+
+bool operator!=(VkVideoDecodeH264MvcEXT const &lhs,
+                VkVideoDecodeH264MvcEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265ProfileEXT const &lhs,
+                VkVideoDecodeH265ProfileEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stdProfileIdc == rhs.stdProfileIdc);
+}
+
+bool operator!=(VkVideoDecodeH265ProfileEXT const &lhs,
+                VkVideoDecodeH265ProfileEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265CapabilitiesEXT const &lhs,
+                VkVideoDecodeH265CapabilitiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxLevel == rhs.maxLevel) &&
+         (lhs.stdExtensionVersion == rhs.stdExtensionVersion);
+}
+
+bool operator!=(VkVideoDecodeH265CapabilitiesEXT const &lhs,
+                VkVideoDecodeH265CapabilitiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265SessionCreateInfoEXT const &lhs,
+                VkVideoDecodeH265SessionCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pStdExtensionVersion == rhs.pStdExtensionVersion);
+}
+
+bool operator!=(VkVideoDecodeH265SessionCreateInfoEXT const &lhs,
+                VkVideoDecodeH265SessionCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265SessionParametersAddInfoEXT const &lhs,
+                VkVideoDecodeH265SessionParametersAddInfoEXT const &rhs) noexcept {
+  if(lhs.spsStdCount != rhs.spsStdCount)
+    return false;
+
+  if(lhs.ppsStdCount != rhs.ppsStdCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.spsStdCount; ++i) {
+    if(lhs.pSpsStd[i] != rhs.pSpsStd[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.ppsStdCount; ++i) {
+    if(lhs.pPpsStd[i] != rhs.pPpsStd[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkVideoDecodeH265SessionParametersAddInfoEXT const &lhs,
+                VkVideoDecodeH265SessionParametersAddInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265SessionParametersCreateInfoEXT const &lhs,
+                VkVideoDecodeH265SessionParametersCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxSpsStdCount == rhs.maxSpsStdCount) &&
+         (lhs.maxPpsStdCount == rhs.maxPpsStdCount) &&
+         (lhs.pParametersAddInfo == rhs.pParametersAddInfo);
+}
+
+bool operator!=(VkVideoDecodeH265SessionParametersCreateInfoEXT const &lhs,
+                VkVideoDecodeH265SessionParametersCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265PictureInfoEXT const &lhs,
+                VkVideoDecodeH265PictureInfoEXT const &rhs) noexcept {
+  if(lhs.slicesCount != rhs.slicesCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.slicesCount; ++i) {
+    if(lhs.pSlicesDataOffsets[i] != rhs.pSlicesDataOffsets[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pStdPictureInfo == rhs.pStdPictureInfo);
+}
+
+bool operator!=(VkVideoDecodeH265PictureInfoEXT const &lhs,
+                VkVideoDecodeH265PictureInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoDecodeH265DpbSlotInfoEXT const &lhs,
+                VkVideoDecodeH265DpbSlotInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pStdReferenceInfo == rhs.pStdReferenceInfo);
+}
+
+bool operator!=(VkVideoDecodeH265DpbSlotInfoEXT const &lhs,
+                VkVideoDecodeH265DpbSlotInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoSessionCreateInfoKHR const &lhs,
+                VkVideoSessionCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.queueFamilyIndex == rhs.queueFamilyIndex) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pVideoProfile == rhs.pVideoProfile) &&
+         (lhs.pictureFormat == rhs.pictureFormat) &&
+         (lhs.maxCodedExtent == rhs.maxCodedExtent) &&
+         (lhs.referencePicturesFormat == rhs.referencePicturesFormat) &&
+         (lhs.maxReferencePicturesSlotsCount == rhs.maxReferencePicturesSlotsCount) &&
+         (lhs.maxReferencePicturesActiveCount == rhs.maxReferencePicturesActiveCount);
+}
+
+bool operator!=(VkVideoSessionCreateInfoKHR const &lhs,
+                VkVideoSessionCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoSessionParametersCreateInfoKHR const &lhs,
+                VkVideoSessionParametersCreateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.videoSessionParametersTemplate == rhs.videoSessionParametersTemplate) &&
+         (lhs.videoSession == rhs.videoSession);
+}
+
+bool operator!=(VkVideoSessionParametersCreateInfoKHR const &lhs,
+                VkVideoSessionParametersCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoSessionParametersUpdateInfoKHR const &lhs,
+                VkVideoSessionParametersUpdateInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.updateSequenceCount == rhs.updateSequenceCount);
+}
+
+bool operator!=(VkVideoSessionParametersUpdateInfoKHR const &lhs,
+                VkVideoSessionParametersUpdateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoBeginCodingInfoKHR const &lhs,
+                VkVideoBeginCodingInfoKHR const &rhs) noexcept {
+  if(lhs.referenceSlotCount != rhs.referenceSlotCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.referenceSlotCount; ++i) {
+    if(lhs.pReferenceSlots[i] != rhs.pReferenceSlots[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.codecQualityPreset == rhs.codecQualityPreset) &&
+         (lhs.videoSession == rhs.videoSession) &&
+         (lhs.videoSessionParameters == rhs.videoSessionParameters);
+}
+
+bool operator!=(VkVideoBeginCodingInfoKHR const &lhs,
+                VkVideoBeginCodingInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEndCodingInfoKHR const &lhs,
+                VkVideoEndCodingInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkVideoEndCodingInfoKHR const &lhs,
+                VkVideoEndCodingInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoCodingControlInfoKHR const &lhs,
+                VkVideoCodingControlInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkVideoCodingControlInfoKHR const &lhs,
+                VkVideoCodingControlInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeInfoKHR const &lhs,
+                VkVideoEncodeInfoKHR const &rhs) noexcept {
+  if(lhs.referenceSlotCount != rhs.referenceSlotCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.referenceSlotCount; ++i) {
+    if(lhs.pReferenceSlots[i] != rhs.pReferenceSlots[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.qualityLevel == rhs.qualityLevel) &&
+         (lhs.codedExtent == rhs.codedExtent) &&
+         (lhs.dstBitstreamBuffer == rhs.dstBitstreamBuffer) &&
+         (lhs.dstBitstreamBufferOffset == rhs.dstBitstreamBufferOffset) &&
+         (lhs.dstBitstreamBufferMaxRange == rhs.dstBitstreamBufferMaxRange) &&
+         (lhs.srcPictureResource == rhs.srcPictureResource) &&
+         (lhs.pSetupReferenceSlot == rhs.pSetupReferenceSlot);
+}
+
+bool operator!=(VkVideoEncodeInfoKHR const &lhs,
+                VkVideoEncodeInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeRateControlInfoKHR const &lhs,
+                VkVideoEncodeRateControlInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.rateControlMode == rhs.rateControlMode) &&
+         (lhs.averageBitrate == rhs.averageBitrate) &&
+         (lhs.peakToAverageBitrateRatio == rhs.peakToAverageBitrateRatio) &&
+         (lhs.frameRateNumerator == rhs.frameRateNumerator) &&
+         (lhs.frameRateDenominator == rhs.frameRateDenominator) &&
+         (lhs.virtualBufferSizeInMs == rhs.virtualBufferSizeInMs);
+}
+
+bool operator!=(VkVideoEncodeRateControlInfoKHR const &lhs,
+                VkVideoEncodeRateControlInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264CapabilitiesEXT const &lhs,
+                VkVideoEncodeH264CapabilitiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.inputModeFlags == rhs.inputModeFlags) &&
+         (lhs.outputModeFlags == rhs.outputModeFlags) &&
+         (lhs.minPictureSizeInMbs == rhs.minPictureSizeInMbs) &&
+         (lhs.maxPictureSizeInMbs == rhs.maxPictureSizeInMbs) &&
+         (lhs.inputImageDataAlignment == rhs.inputImageDataAlignment) &&
+         (lhs.maxNumL0ReferenceForP == rhs.maxNumL0ReferenceForP) &&
+         (lhs.maxNumL0ReferenceForB == rhs.maxNumL0ReferenceForB) &&
+         (lhs.maxNumL1Reference == rhs.maxNumL1Reference) &&
+         (lhs.qualityLevelCount == rhs.qualityLevelCount) &&
+         (lhs.stdExtensionVersion == rhs.stdExtensionVersion);
+}
+
+bool operator!=(VkVideoEncodeH264CapabilitiesEXT const &lhs,
+                VkVideoEncodeH264CapabilitiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264SessionCreateInfoEXT const &lhs,
+                VkVideoEncodeH264SessionCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.maxPictureSizeInMbs == rhs.maxPictureSizeInMbs) &&
+         (lhs.pStdExtensionVersion == rhs.pStdExtensionVersion);
+}
+
+bool operator!=(VkVideoEncodeH264SessionCreateInfoEXT const &lhs,
+                VkVideoEncodeH264SessionCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264SessionParametersAddInfoEXT const &lhs,
+                VkVideoEncodeH264SessionParametersAddInfoEXT const &rhs) noexcept {
+  if(lhs.spsStdCount != rhs.spsStdCount)
+    return false;
+
+  if(lhs.ppsStdCount != rhs.ppsStdCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.spsStdCount; ++i) {
+    if(lhs.pSpsStd[i] != rhs.pSpsStd[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.ppsStdCount; ++i) {
+    if(lhs.pPpsStd[i] != rhs.pPpsStd[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkVideoEncodeH264SessionParametersAddInfoEXT const &lhs,
+                VkVideoEncodeH264SessionParametersAddInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264SessionParametersCreateInfoEXT const &lhs,
+                VkVideoEncodeH264SessionParametersCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxSpsStdCount == rhs.maxSpsStdCount) &&
+         (lhs.maxPpsStdCount == rhs.maxPpsStdCount) &&
+         (lhs.pParametersAddInfo == rhs.pParametersAddInfo);
+}
+
+bool operator!=(VkVideoEncodeH264SessionParametersCreateInfoEXT const &lhs,
+                VkVideoEncodeH264SessionParametersCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264DpbSlotInfoEXT const &lhs,
+                VkVideoEncodeH264DpbSlotInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.slotIndex == rhs.slotIndex) &&
+         (lhs.pStdPictureInfo == rhs.pStdPictureInfo);
+}
+
+bool operator!=(VkVideoEncodeH264DpbSlotInfoEXT const &lhs,
+                VkVideoEncodeH264DpbSlotInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264VclFrameInfoEXT const &lhs,
+                VkVideoEncodeH264VclFrameInfoEXT const &rhs) noexcept {
+  if(lhs.refDefaultFinalList0EntryCount != rhs.refDefaultFinalList0EntryCount)
+    return false;
+
+  if(lhs.refDefaultFinalList1EntryCount != rhs.refDefaultFinalList1EntryCount)
+    return false;
+
+  if(lhs.naluSliceEntryCount != rhs.naluSliceEntryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.refDefaultFinalList0EntryCount; ++i) {
+    if(lhs.pRefDefaultFinalList0Entries[i] != rhs.pRefDefaultFinalList0Entries[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.refDefaultFinalList1EntryCount; ++i) {
+    if(lhs.pRefDefaultFinalList1Entries[i] != rhs.pRefDefaultFinalList1Entries[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.naluSliceEntryCount; ++i) {
+    if(lhs.pNaluSliceEntries[i] != rhs.pNaluSliceEntries[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pCurrentPictureInfo == rhs.pCurrentPictureInfo);
+}
+
+bool operator!=(VkVideoEncodeH264VclFrameInfoEXT const &lhs,
+                VkVideoEncodeH264VclFrameInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264EmitPictureParametersEXT const &lhs,
+                VkVideoEncodeH264EmitPictureParametersEXT const &rhs) noexcept {
+  if(lhs.ppsIdEntryCount != rhs.ppsIdEntryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.ppsIdEntryCount; ++i) {
+    if(lhs.ppsIdEntries[i] != rhs.ppsIdEntries[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.spsId == rhs.spsId) &&
+         (lhs.emitSpsEnable == rhs.emitSpsEnable);
+}
+
+bool operator!=(VkVideoEncodeH264EmitPictureParametersEXT const &lhs,
+                VkVideoEncodeH264EmitPictureParametersEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264ProfileEXT const &lhs,
+                VkVideoEncodeH264ProfileEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stdProfileIdc == rhs.stdProfileIdc);
+}
+
+bool operator!=(VkVideoEncodeH264ProfileEXT const &lhs,
+                VkVideoEncodeH264ProfileEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH264NaluSliceEXT const &lhs,
+                VkVideoEncodeH264NaluSliceEXT const &rhs) noexcept {
+  if(lhs.refFinalList0EntryCount != rhs.refFinalList0EntryCount)
+    return false;
+
+  if(lhs.refFinalList1EntryCount != rhs.refFinalList1EntryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.refFinalList0EntryCount; ++i) {
+    if(lhs.pRefFinalList0Entries[i] != rhs.pRefFinalList0Entries[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.refFinalList1EntryCount; ++i) {
+    if(lhs.pRefFinalList1Entries[i] != rhs.pRefFinalList1Entries[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pSliceHeaderStd == rhs.pSliceHeaderStd) &&
+         (lhs.mbCount == rhs.mbCount) &&
+         (lhs.precedingNaluBytes == rhs.precedingNaluBytes) &&
+         (lhs.minQp == rhs.minQp) &&
+         (lhs.maxQp == rhs.maxQp);
+}
+
+bool operator!=(VkVideoEncodeH264NaluSliceEXT const &lhs,
+                VkVideoEncodeH264NaluSliceEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265CapabilitiesEXT const &lhs,
+                VkVideoEncodeH265CapabilitiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.inputModeFlags == rhs.inputModeFlags) &&
+         (lhs.outputModeFlags == rhs.outputModeFlags) &&
+         (lhs.ctbSizes == rhs.ctbSizes) &&
+         (lhs.inputImageDataAlignment == rhs.inputImageDataAlignment) &&
+         (lhs.maxNumL0ReferenceForP == rhs.maxNumL0ReferenceForP) &&
+         (lhs.maxNumL0ReferenceForB == rhs.maxNumL0ReferenceForB) &&
+         (lhs.maxNumL1Reference == rhs.maxNumL1Reference) &&
+         (lhs.maxNumSubLayers == rhs.maxNumSubLayers) &&
+         (lhs.qualityLevelCount == rhs.qualityLevelCount) &&
+         (lhs.stdExtensionVersion == rhs.stdExtensionVersion);
+}
+
+bool operator!=(VkVideoEncodeH265CapabilitiesEXT const &lhs,
+                VkVideoEncodeH265CapabilitiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265SessionCreateInfoEXT const &lhs,
+                VkVideoEncodeH265SessionCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.pStdExtensionVersion == rhs.pStdExtensionVersion);
+}
+
+bool operator!=(VkVideoEncodeH265SessionCreateInfoEXT const &lhs,
+                VkVideoEncodeH265SessionCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265SessionParametersAddInfoEXT const &lhs,
+                VkVideoEncodeH265SessionParametersAddInfoEXT const &rhs) noexcept {
+  if(lhs.vpsStdCount != rhs.vpsStdCount)
+    return false;
+
+  if(lhs.spsStdCount != rhs.spsStdCount)
+    return false;
+
+  if(lhs.ppsStdCount != rhs.ppsStdCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.vpsStdCount; ++i) {
+    if(lhs.pVpsStd[i] != rhs.pVpsStd[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.spsStdCount; ++i) {
+    if(lhs.pSpsStd[i] != rhs.pSpsStd[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.ppsStdCount; ++i) {
+    if(lhs.pPpsStd[i] != rhs.pPpsStd[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkVideoEncodeH265SessionParametersAddInfoEXT const &lhs,
+                VkVideoEncodeH265SessionParametersAddInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265SessionParametersCreateInfoEXT const &lhs,
+                VkVideoEncodeH265SessionParametersCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxVpsStdCount == rhs.maxVpsStdCount) &&
+         (lhs.maxSpsStdCount == rhs.maxSpsStdCount) &&
+         (lhs.maxPpsStdCount == rhs.maxPpsStdCount) &&
+         (lhs.pParametersAddInfo == rhs.pParametersAddInfo);
+}
+
+bool operator!=(VkVideoEncodeH265SessionParametersCreateInfoEXT const &lhs,
+                VkVideoEncodeH265SessionParametersCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265VclFrameInfoEXT const &lhs,
+                VkVideoEncodeH265VclFrameInfoEXT const &rhs) noexcept {
+  if(lhs.naluSliceEntryCount != rhs.naluSliceEntryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.naluSliceEntryCount; ++i) {
+    if(lhs.pNaluSliceEntries[i] != rhs.pNaluSliceEntries[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pReferenceFinalLists == rhs.pReferenceFinalLists) &&
+         (lhs.pCurrentPictureInfo == rhs.pCurrentPictureInfo);
+}
+
+bool operator!=(VkVideoEncodeH265VclFrameInfoEXT const &lhs,
+                VkVideoEncodeH265VclFrameInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265EmitPictureParametersEXT const &lhs,
+                VkVideoEncodeH265EmitPictureParametersEXT const &rhs) noexcept {
+  if(lhs.ppsIdEntryCount != rhs.ppsIdEntryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.ppsIdEntryCount; ++i) {
+    if(lhs.ppsIdEntries[i] != rhs.ppsIdEntries[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.vpsId == rhs.vpsId) &&
+         (lhs.spsId == rhs.spsId) &&
+         (lhs.emitVpsEnable == rhs.emitVpsEnable) &&
+         (lhs.emitSpsEnable == rhs.emitSpsEnable);
+}
+
+bool operator!=(VkVideoEncodeH265EmitPictureParametersEXT const &lhs,
+                VkVideoEncodeH265EmitPictureParametersEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265NaluSliceEXT const &lhs,
+                VkVideoEncodeH265NaluSliceEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.ctbCount == rhs.ctbCount) &&
+         (lhs.pReferenceFinalLists == rhs.pReferenceFinalLists) &&
+         (lhs.pSliceHeaderStd == rhs.pSliceHeaderStd);
+}
+
+bool operator!=(VkVideoEncodeH265NaluSliceEXT const &lhs,
+                VkVideoEncodeH265NaluSliceEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265ProfileEXT const &lhs,
+                VkVideoEncodeH265ProfileEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.stdProfileIdc == rhs.stdProfileIdc);
+}
+
+bool operator!=(VkVideoEncodeH265ProfileEXT const &lhs,
+                VkVideoEncodeH265ProfileEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265DpbSlotInfoEXT const &lhs,
+                VkVideoEncodeH265DpbSlotInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.slotIndex == rhs.slotIndex) &&
+         (lhs.pStdReferenceInfo == rhs.pStdReferenceInfo);
+}
+
+bool operator!=(VkVideoEncodeH265DpbSlotInfoEXT const &lhs,
+                VkVideoEncodeH265DpbSlotInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+bool operator==(VkVideoEncodeH265ReferenceListsEXT const &lhs,
+                VkVideoEncodeH265ReferenceListsEXT const &rhs) noexcept {
+  if(lhs.referenceList0EntryCount != rhs.referenceList0EntryCount)
+    return false;
+
+  if(lhs.referenceList1EntryCount != rhs.referenceList1EntryCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.referenceList0EntryCount; ++i) {
+    if(lhs.pReferenceList0Entries[i] != rhs.pReferenceList0Entries[i])
+      return false;
+  }
+
+  for(uint32_t i = 0; i < lhs.referenceList1EntryCount; ++i) {
+    if(lhs.pReferenceList1Entries[i] != rhs.pReferenceList1Entries[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.pReferenceModifications == rhs.pReferenceModifications);
+}
+
+bool operator!=(VkVideoEncodeH265ReferenceListsEXT const &lhs,
+                VkVideoEncodeH265ReferenceListsEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+bool operator==(VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &lhs,
+                VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.inheritedViewportScissor2D == rhs.inheritedViewportScissor2D);
+}
+
+bool operator!=(VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &lhs,
+                VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCommandBufferInheritanceViewportScissorInfoNV const &lhs,
+                VkCommandBufferInheritanceViewportScissorInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.viewportScissor2D == rhs.viewportScissor2D) &&
+         (lhs.viewportDepthCount == rhs.viewportDepthCount) &&
+         (lhs.pViewportDepths == rhs.pViewportDepths);
+}
+
+bool operator!=(VkCommandBufferInheritanceViewportScissorInfoNV const &lhs,
+                VkCommandBufferInheritanceViewportScissorInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &lhs,
+                VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.ycbcr2plane444Formats == rhs.ycbcr2plane444Formats);
+}
+
+bool operator!=(VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &lhs,
+                VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceProvokingVertexFeaturesEXT const &lhs,
+                VkPhysicalDeviceProvokingVertexFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.provokingVertexLast == rhs.provokingVertexLast) &&
+         (lhs.transformFeedbackPreservesProvokingVertex == rhs.transformFeedbackPreservesProvokingVertex);
+}
+
+bool operator!=(VkPhysicalDeviceProvokingVertexFeaturesEXT const &lhs,
+                VkPhysicalDeviceProvokingVertexFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceProvokingVertexPropertiesEXT const &lhs,
+                VkPhysicalDeviceProvokingVertexPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.provokingVertexModePerPipeline == rhs.provokingVertexModePerPipeline) &&
+         (lhs.transformFeedbackPreservesTriangleFanProvokingVertex == rhs.transformFeedbackPreservesTriangleFanProvokingVertex);
+}
+
+bool operator!=(VkPhysicalDeviceProvokingVertexPropertiesEXT const &lhs,
+                VkPhysicalDeviceProvokingVertexPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.provokingVertexMode == rhs.provokingVertexMode);
+}
+
+bool operator!=(VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &lhs,
+                VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCuModuleCreateInfoNVX const &lhs,
+                VkCuModuleCreateInfoNVX const &rhs) noexcept {
+  if(lhs.dataSize != rhs.dataSize)
+    return false;
+
+  if(memcmp(lhs.pData, rhs.pData, lhs.dataSize) != 0)
+    return false;
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkCuModuleCreateInfoNVX const &lhs,
+                VkCuModuleCreateInfoNVX const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCuFunctionCreateInfoNVX const &lhs,
+                VkCuFunctionCreateInfoNVX const &rhs) noexcept {
+  if (lhs.pName != rhs.pName) {
+    if(lhs.pName == nullptr || rhs.pName == nullptr)
+      return false;
+    if(strcmp(lhs.pName, rhs.pName) != 0)
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.module == rhs.module);
+}
+
+bool operator!=(VkCuFunctionCreateInfoNVX const &lhs,
+                VkCuFunctionCreateInfoNVX const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCuLaunchInfoNVX const &lhs,
+                VkCuLaunchInfoNVX const &rhs) noexcept {
+  if(lhs.paramCount != rhs.paramCount)
+    return false;
+
+  if(lhs.extraCount != rhs.extraCount)
+    return false;
+
+  if(memcmp(lhs.pParams, rhs.pParams, lhs.paramCount) != 0)
+    return false;
+
+  if(memcmp(lhs.pExtras, rhs.pExtras, lhs.extraCount) != 0)
+    return false;
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.function == rhs.function) &&
+         (lhs.gridDimX == rhs.gridDimX) &&
+         (lhs.gridDimY == rhs.gridDimY) &&
+         (lhs.gridDimZ == rhs.gridDimZ) &&
+         (lhs.blockDimX == rhs.blockDimX) &&
+         (lhs.blockDimY == rhs.blockDimY) &&
+         (lhs.blockDimZ == rhs.blockDimZ) &&
+         (lhs.sharedMemBytes == rhs.sharedMemBytes);
+}
+
+bool operator!=(VkCuLaunchInfoNVX const &lhs,
+                VkCuLaunchInfoNVX const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.shaderIntegerDotProduct == rhs.shaderIntegerDotProduct);
+}
+
+bool operator!=(VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const &lhs,
+                VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const &lhs,
+                VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.integerDotProduct8BitUnsignedAccelerated == rhs.integerDotProduct8BitUnsignedAccelerated) &&
+         (lhs.integerDotProduct8BitSignedAccelerated == rhs.integerDotProduct8BitSignedAccelerated) &&
+         (lhs.integerDotProduct8BitMixedSignednessAccelerated == rhs.integerDotProduct8BitMixedSignednessAccelerated) &&
+         (lhs.integerDotProduct4x8BitPackedUnsignedAccelerated == rhs.integerDotProduct4x8BitPackedUnsignedAccelerated) &&
+         (lhs.integerDotProduct4x8BitPackedSignedAccelerated == rhs.integerDotProduct4x8BitPackedSignedAccelerated) &&
+         (lhs.integerDotProduct4x8BitPackedMixedSignednessAccelerated == rhs.integerDotProduct4x8BitPackedMixedSignednessAccelerated) &&
+         (lhs.integerDotProduct16BitUnsignedAccelerated == rhs.integerDotProduct16BitUnsignedAccelerated) &&
+         (lhs.integerDotProduct16BitSignedAccelerated == rhs.integerDotProduct16BitSignedAccelerated) &&
+         (lhs.integerDotProduct16BitMixedSignednessAccelerated == rhs.integerDotProduct16BitMixedSignednessAccelerated) &&
+         (lhs.integerDotProduct32BitUnsignedAccelerated == rhs.integerDotProduct32BitUnsignedAccelerated) &&
+         (lhs.integerDotProduct32BitSignedAccelerated == rhs.integerDotProduct32BitSignedAccelerated) &&
+         (lhs.integerDotProduct32BitMixedSignednessAccelerated == rhs.integerDotProduct32BitMixedSignednessAccelerated) &&
+         (lhs.integerDotProduct64BitUnsignedAccelerated == rhs.integerDotProduct64BitUnsignedAccelerated) &&
+         (lhs.integerDotProduct64BitSignedAccelerated == rhs.integerDotProduct64BitSignedAccelerated) &&
+         (lhs.integerDotProduct64BitMixedSignednessAccelerated == rhs.integerDotProduct64BitMixedSignednessAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating8BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitSignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated == rhs.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated == rhs.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated == rhs.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating16BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitSignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated == rhs.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating32BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitSignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated == rhs.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating64BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitSignedAccelerated) &&
+         (lhs.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated == rhs.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated);
+}
+
+bool operator!=(VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const &lhs,
+                VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDrmPropertiesEXT const &lhs,
+                VkPhysicalDeviceDrmPropertiesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.hasPrimary == rhs.hasPrimary) &&
+         (lhs.hasRender == rhs.hasRender) &&
+         (lhs.primaryMajor == rhs.primaryMajor) &&
+         (lhs.primaryMinor == rhs.primaryMinor) &&
+         (lhs.renderMajor == rhs.renderMajor) &&
+         (lhs.renderMinor == rhs.renderMinor);
+}
+
+bool operator!=(VkPhysicalDeviceDrmPropertiesEXT const &lhs,
+                VkPhysicalDeviceDrmPropertiesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &lhs,
+                VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.rayTracingMotionBlur == rhs.rayTracingMotionBlur) &&
+         (lhs.rayTracingMotionBlurPipelineTraceRaysIndirect == rhs.rayTracingMotionBlurPipelineTraceRaysIndirect);
+}
+
+bool operator!=(VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &lhs,
+                VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureMotionInfoNV const &lhs,
+                VkAccelerationStructureMotionInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.maxInstances == rhs.maxInstances) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkAccelerationStructureMotionInfoNV const &lhs,
+                VkAccelerationStructureMotionInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkSRTDataNV const &lhs,
+                VkSRTDataNV const &rhs) noexcept {
+  return (lhs.sx == rhs.sx) &&
+         (lhs.a == rhs.a) &&
+         (lhs.b == rhs.b) &&
+         (lhs.pvx == rhs.pvx) &&
+         (lhs.sy == rhs.sy) &&
+         (lhs.c == rhs.c) &&
+         (lhs.pvy == rhs.pvy) &&
+         (lhs.sz == rhs.sz) &&
+         (lhs.pvz == rhs.pvz) &&
+         (lhs.qx == rhs.qx) &&
+         (lhs.qy == rhs.qy) &&
+         (lhs.qz == rhs.qz) &&
+         (lhs.qw == rhs.qw) &&
+         (lhs.tx == rhs.tx) &&
+         (lhs.ty == rhs.ty) &&
+         (lhs.tz == rhs.tz);
+}
+
+bool operator!=(VkSRTDataNV const &lhs,
+                VkSRTDataNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureSRTMotionInstanceNV const &lhs,
+                VkAccelerationStructureSRTMotionInstanceNV const &rhs) noexcept {
+  return (lhs.transformT0 == rhs.transformT0) &&
+         (lhs.transformT1 == rhs.transformT1) &&
+         (lhs.instanceCustomIndex == rhs.instanceCustomIndex) &&
+         (lhs.mask == rhs.mask) &&
+         (lhs.instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.accelerationStructureReference == rhs.accelerationStructureReference);
+}
+
+bool operator!=(VkAccelerationStructureSRTMotionInstanceNV const &lhs,
+                VkAccelerationStructureSRTMotionInstanceNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAccelerationStructureMatrixMotionInstanceNV const &lhs,
+                VkAccelerationStructureMatrixMotionInstanceNV const &rhs) noexcept {
+  return (lhs.transformT0 == rhs.transformT0) &&
+         (lhs.transformT1 == rhs.transformT1) &&
+         (lhs.instanceCustomIndex == rhs.instanceCustomIndex) &&
+         (lhs.mask == rhs.mask) &&
+         (lhs.instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.accelerationStructureReference == rhs.accelerationStructureReference);
+}
+
+bool operator!=(VkAccelerationStructureMatrixMotionInstanceNV const &lhs,
+                VkAccelerationStructureMatrixMotionInstanceNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMemoryGetRemoteAddressInfoNV const &lhs,
+                VkMemoryGetRemoteAddressInfoNV const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memory == rhs.memory) &&
+         (lhs.handleType == rhs.handleType);
+}
+
+bool operator!=(VkMemoryGetRemoteAddressInfoNV const &lhs,
+                VkMemoryGetRemoteAddressInfoNV const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImportMemoryBufferCollectionFUCHSIA const &lhs,
+                VkImportMemoryBufferCollectionFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.collection == rhs.collection) &&
+         (lhs.index == rhs.index);
+}
+
+bool operator!=(VkImportMemoryBufferCollectionFUCHSIA const &lhs,
+                VkImportMemoryBufferCollectionFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionImageCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionImageCreateInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.collection == rhs.collection) &&
+         (lhs.index == rhs.index);
+}
+
+bool operator!=(VkBufferCollectionImageCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionImageCreateInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionBufferCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionBufferCreateInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.collection == rhs.collection) &&
+         (lhs.index == rhs.index);
+}
+
+bool operator!=(VkBufferCollectionBufferCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionBufferCreateInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionCreateInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.collectionToken == rhs.collectionToken);
+}
+
+bool operator!=(VkBufferCollectionCreateInfoFUCHSIA const &lhs,
+                VkBufferCollectionCreateInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionPropertiesFUCHSIA const &lhs,
+                VkBufferCollectionPropertiesFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.memoryTypeBits == rhs.memoryTypeBits) &&
+         (lhs.bufferCount == rhs.bufferCount) &&
+         (lhs.createInfoIndex == rhs.createInfoIndex) &&
+         (lhs.sysmemPixelFormat == rhs.sysmemPixelFormat) &&
+         (lhs.formatFeatures == rhs.formatFeatures) &&
+         (lhs.sysmemColorSpaceIndex == rhs.sysmemColorSpaceIndex) &&
+         (lhs.samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents) &&
+         (lhs.suggestedYcbcrModel == rhs.suggestedYcbcrModel) &&
+         (lhs.suggestedYcbcrRange == rhs.suggestedYcbcrRange) &&
+         (lhs.suggestedXChromaOffset == rhs.suggestedXChromaOffset) &&
+         (lhs.suggestedYChromaOffset == rhs.suggestedYChromaOffset);
+}
+
+bool operator!=(VkBufferCollectionPropertiesFUCHSIA const &lhs,
+                VkBufferCollectionPropertiesFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferConstraintsInfoFUCHSIA const &lhs,
+                VkBufferConstraintsInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.createInfo == rhs.createInfo) &&
+         (lhs.requiredFormatFeatures == rhs.requiredFormatFeatures) &&
+         (lhs.bufferCollectionConstraints == rhs.bufferCollectionConstraints);
+}
+
+bool operator!=(VkBufferConstraintsInfoFUCHSIA const &lhs,
+                VkBufferConstraintsInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkSysmemColorSpaceFUCHSIA const &lhs,
+                VkSysmemColorSpaceFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.colorSpace == rhs.colorSpace);
+}
+
+bool operator!=(VkSysmemColorSpaceFUCHSIA const &lhs,
+                VkSysmemColorSpaceFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImageFormatConstraintsInfoFUCHSIA const &lhs,
+                VkImageFormatConstraintsInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.imageCreateInfo == rhs.imageCreateInfo) &&
+         (lhs.requiredFormatFeatures == rhs.requiredFormatFeatures) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.sysmemPixelFormat == rhs.sysmemPixelFormat) &&
+         (lhs.colorSpaceCount == rhs.colorSpaceCount) &&
+         (lhs.pColorSpaces == rhs.pColorSpaces);
+}
+
+bool operator!=(VkImageFormatConstraintsInfoFUCHSIA const &lhs,
+                VkImageFormatConstraintsInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkImageConstraintsInfoFUCHSIA const &lhs,
+                VkImageConstraintsInfoFUCHSIA const &rhs) noexcept {
+  if(lhs.formatConstraintsCount != rhs.formatConstraintsCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.formatConstraintsCount; ++i) {
+    if(lhs.pFormatConstraints[i] != rhs.pFormatConstraints[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.bufferCollectionConstraints == rhs.bufferCollectionConstraints) &&
+         (lhs.flags == rhs.flags);
+}
+
+bool operator!=(VkImageConstraintsInfoFUCHSIA const &lhs,
+                VkImageConstraintsInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+bool operator==(VkBufferCollectionConstraintsInfoFUCHSIA const &lhs,
+                VkBufferCollectionConstraintsInfoFUCHSIA const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.minBufferCount == rhs.minBufferCount) &&
+         (lhs.maxBufferCount == rhs.maxBufferCount) &&
+         (lhs.minBufferCountForCamping == rhs.minBufferCountForCamping) &&
+         (lhs.minBufferCountForDedicatedSlack == rhs.minBufferCountForDedicatedSlack) &&
+         (lhs.minBufferCountForSharedSlack == rhs.minBufferCountForSharedSlack);
+}
+
+bool operator!=(VkBufferCollectionConstraintsInfoFUCHSIA const &lhs,
+                VkBufferCollectionConstraintsInfoFUCHSIA const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+bool operator==(VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &lhs,
+                VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.formatRgba10x6WithoutYCbCrSampler == rhs.formatRgba10x6WithoutYCbCrSampler);
+}
+
+bool operator!=(VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &lhs,
+                VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkFormatProperties3KHR const &lhs,
+                VkFormatProperties3KHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.linearTilingFeatures == rhs.linearTilingFeatures) &&
+         (lhs.optimalTilingFeatures == rhs.optimalTilingFeatures) &&
+         (lhs.bufferFeatures == rhs.bufferFeatures);
+}
+
+bool operator!=(VkFormatProperties3KHR const &lhs,
+                VkFormatProperties3KHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDrmFormatModifierPropertiesList2EXT const &lhs,
+                VkDrmFormatModifierPropertiesList2EXT const &rhs) noexcept {
+  if(lhs.drmFormatModifierCount != rhs.drmFormatModifierCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.drmFormatModifierCount; ++i) {
+    if(lhs.pDrmFormatModifierProperties[i] != rhs.pDrmFormatModifierProperties[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType);
+}
+
+bool operator!=(VkDrmFormatModifierPropertiesList2EXT const &lhs,
+                VkDrmFormatModifierPropertiesList2EXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkDrmFormatModifierProperties2EXT const &lhs,
+                VkDrmFormatModifierProperties2EXT const &rhs) noexcept {
+  return (lhs.drmFormatModifier == rhs.drmFormatModifier) &&
+         (lhs.drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount) &&
+         (lhs.drmFormatModifierTilingFeatures == rhs.drmFormatModifierTilingFeatures);
+}
+
+bool operator!=(VkDrmFormatModifierProperties2EXT const &lhs,
+                VkDrmFormatModifierProperties2EXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+bool operator==(VkAndroidHardwareBufferFormatProperties2ANDROID const &lhs,
+                VkAndroidHardwareBufferFormatProperties2ANDROID const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.format == rhs.format) &&
+         (lhs.externalFormat == rhs.externalFormat) &&
+         (lhs.formatFeatures == rhs.formatFeatures) &&
+         (lhs.samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents) &&
+         (lhs.suggestedYcbcrModel == rhs.suggestedYcbcrModel) &&
+         (lhs.suggestedYcbcrRange == rhs.suggestedYcbcrRange) &&
+         (lhs.suggestedXChromaOffset == rhs.suggestedXChromaOffset) &&
+         (lhs.suggestedYChromaOffset == rhs.suggestedYChromaOffset);
+}
+
+bool operator!=(VkAndroidHardwareBufferFormatProperties2ANDROID const &lhs,
+                VkAndroidHardwareBufferFormatProperties2ANDROID const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+bool operator==(VkPipelineRenderingCreateInfoKHR const &lhs,
+                VkPipelineRenderingCreateInfoKHR const &rhs) noexcept {
+  if(lhs.colorAttachmentCount != rhs.colorAttachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.colorAttachmentCount; ++i) {
+    if(lhs.pColorAttachmentFormats[i] != rhs.pColorAttachmentFormats[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.viewMask == rhs.viewMask) &&
+         (lhs.depthAttachmentFormat == rhs.depthAttachmentFormat) &&
+         (lhs.stencilAttachmentFormat == rhs.stencilAttachmentFormat);
+}
+
+bool operator!=(VkPipelineRenderingCreateInfoKHR const &lhs,
+                VkPipelineRenderingCreateInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderingInfoKHR const &lhs,
+                VkRenderingInfoKHR const &rhs) noexcept {
+  if(lhs.colorAttachmentCount != rhs.colorAttachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.colorAttachmentCount; ++i) {
+    if(lhs.pColorAttachments[i] != rhs.pColorAttachments[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.renderArea == rhs.renderArea) &&
+         (lhs.layerCount == rhs.layerCount) &&
+         (lhs.viewMask == rhs.viewMask) &&
+         (lhs.pDepthAttachment == rhs.pDepthAttachment) &&
+         (lhs.pStencilAttachment == rhs.pStencilAttachment);
+}
+
+bool operator!=(VkRenderingInfoKHR const &lhs,
+                VkRenderingInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderingFragmentShadingRateAttachmentInfoKHR const &lhs,
+                VkRenderingFragmentShadingRateAttachmentInfoKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.imageView == rhs.imageView) &&
+         (lhs.imageLayout == rhs.imageLayout) &&
+         (lhs.shadingRateAttachmentTexelSize == rhs.shadingRateAttachmentTexelSize);
+}
+
+bool operator!=(VkRenderingFragmentShadingRateAttachmentInfoKHR const &lhs,
+                VkRenderingFragmentShadingRateAttachmentInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkRenderingFragmentDensityMapAttachmentInfoEXT const &lhs,
+                VkRenderingFragmentDensityMapAttachmentInfoEXT const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.imageView == rhs.imageView) &&
+         (lhs.imageLayout == rhs.imageLayout);
+}
+
+bool operator!=(VkRenderingFragmentDensityMapAttachmentInfoEXT const &lhs,
+                VkRenderingFragmentDensityMapAttachmentInfoEXT const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkPhysicalDeviceDynamicRenderingFeaturesKHR const &lhs,
+                VkPhysicalDeviceDynamicRenderingFeaturesKHR const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.dynamicRendering == rhs.dynamicRendering);
+}
+
+bool operator!=(VkPhysicalDeviceDynamicRenderingFeaturesKHR const &lhs,
+                VkPhysicalDeviceDynamicRenderingFeaturesKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkCommandBufferInheritanceRenderingInfoKHR const &lhs,
+                VkCommandBufferInheritanceRenderingInfoKHR const &rhs) noexcept {
+  if(lhs.colorAttachmentCount != rhs.colorAttachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.colorAttachmentCount; ++i) {
+    if(lhs.pColorAttachmentFormats[i] != rhs.pColorAttachmentFormats[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.flags == rhs.flags) &&
+         (lhs.viewMask == rhs.viewMask) &&
+         (lhs.depthAttachmentFormat == rhs.depthAttachmentFormat) &&
+         (lhs.stencilAttachmentFormat == rhs.stencilAttachmentFormat) &&
+         (lhs.rasterizationSamples == rhs.rasterizationSamples);
+}
+
+bool operator!=(VkCommandBufferInheritanceRenderingInfoKHR const &lhs,
+                VkCommandBufferInheritanceRenderingInfoKHR const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkAttachmentSampleCountInfoAMD const &lhs,
+                VkAttachmentSampleCountInfoAMD const &rhs) noexcept {
+  if(lhs.colorAttachmentCount != rhs.colorAttachmentCount)
+    return false;
+
+  for(uint32_t i = 0; i < lhs.colorAttachmentCount; ++i) {
+    if(lhs.pColorAttachmentSamples[i] != rhs.pColorAttachmentSamples[i])
+      return false;
+  }
+
+  return (lhs.sType == rhs.sType) &&
+         (lhs.depthStencilAttachmentSamples == rhs.depthStencilAttachmentSamples);
+}
+
+bool operator!=(VkAttachmentSampleCountInfoAMD const &lhs,
+                VkAttachmentSampleCountInfoAMD const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+bool operator==(VkMultiviewPerViewAttributesInfoNVX const &lhs,
+                VkMultiviewPerViewAttributesInfoNVX const &rhs) noexcept {
+  return (lhs.sType == rhs.sType) &&
+         (lhs.perViewAttributes == rhs.perViewAttributes) &&
+         (lhs.perViewAttributesPositionXOnly == rhs.perViewAttributesPositionXOnly);
+}
+
+bool operator!=(VkMultiviewPerViewAttributesInfoNVX const &lhs,
+                VkMultiviewPerViewAttributesInfoNVX const &rhs) noexcept {
+  return !(lhs == rhs);
+}
+
+#endif // VK_EQUALITY_CHECK_CONFIG_MAIN
+
+#endif // VK_EQUALITY_CHECK_V198_HPP
diff --git a/include/detail_error_code/vk_error_code_v198.hpp b/include/detail_error_code/vk_error_code_v198.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..dc343055b01205341355baf97acfd19f19f5678b
--- /dev/null
+++ b/include/detail_error_code/vk_error_code_v198.hpp
@@ -0,0 +1,158 @@
+/*
+    Copyright (C) 2020 George Cave - gcave@stablecoder.ca
+
+    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.
+*/
+
+/*
+    This file was auto-generated by the Vulkan mini-libs utility can be found at
+    https://github.com/stablecoder/vulkan-mini-libs.git
+    or
+    https://git.stabletec.com/utilities/vulkan-mini-libs.git
+
+    Check for an updated version anytime, or state concerns/bugs.
+*/
+
+#ifndef VK_ERROR_CODE_V198_HPP
+#define VK_ERROR_CODE_V198_HPP
+
+#include <vulkan/vulkan.h>
+
+#include <system_error>
+
+/*  USAGE
+    To use, include this header where the declarations for the boolean checks are required.
+
+    On *ONE* compilation unit, include the definition of `#define VK_ERROR_CODE_CONFIG_MAIN`
+    so that the definitions are compiled somewhere following the one definition rule.
+*/
+
+static_assert(VK_HEADER_VERSION == 198, "Incompatible VK_HEADER_VERSION!");
+
+namespace std {
+template <>
+struct is_error_code_enum<VkResult> : true_type {};
+} // namespace std
+
+std::error_code make_error_code(VkResult);
+
+#ifdef VK_ERROR_CODE_CONFIG_MAIN
+
+namespace {
+
+struct VulkanErrCategory : std::error_category {
+    const char *name() const noexcept override;
+    std::string message(int ev) const override;
+};
+
+const char *VulkanErrCategory::name() const noexcept {
+    return "VkResult";
+}
+
+std::string VulkanErrCategory::message(int ev) const {
+    switch (static_cast<VkResult>(ev)) {
+    case VK_SUCCESS:
+        return "VK_SUCCESS";
+    case VK_NOT_READY:
+        return "VK_NOT_READY";
+    case VK_TIMEOUT:
+        return "VK_TIMEOUT";
+    case VK_EVENT_SET:
+        return "VK_EVENT_SET";
+    case VK_EVENT_RESET:
+        return "VK_EVENT_RESET";
+    case VK_INCOMPLETE:
+        return "VK_INCOMPLETE";
+    case VK_ERROR_OUT_OF_HOST_MEMORY:
+        return "VK_ERROR_OUT_OF_HOST_MEMORY";
+    case VK_ERROR_OUT_OF_DEVICE_MEMORY:
+        return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
+    case VK_ERROR_INITIALIZATION_FAILED:
+        return "VK_ERROR_INITIALIZATION_FAILED";
+    case VK_ERROR_DEVICE_LOST:
+        return "VK_ERROR_DEVICE_LOST";
+    case VK_ERROR_MEMORY_MAP_FAILED:
+        return "VK_ERROR_MEMORY_MAP_FAILED";
+    case VK_ERROR_LAYER_NOT_PRESENT:
+        return "VK_ERROR_LAYER_NOT_PRESENT";
+    case VK_ERROR_EXTENSION_NOT_PRESENT:
+        return "VK_ERROR_EXTENSION_NOT_PRESENT";
+    case VK_ERROR_FEATURE_NOT_PRESENT:
+        return "VK_ERROR_FEATURE_NOT_PRESENT";
+    case VK_ERROR_INCOMPATIBLE_DRIVER:
+        return "VK_ERROR_INCOMPATIBLE_DRIVER";
+    case VK_ERROR_TOO_MANY_OBJECTS:
+        return "VK_ERROR_TOO_MANY_OBJECTS";
+    case VK_ERROR_FORMAT_NOT_SUPPORTED:
+        return "VK_ERROR_FORMAT_NOT_SUPPORTED";
+    case VK_ERROR_FRAGMENTED_POOL:
+        return "VK_ERROR_FRAGMENTED_POOL";
+    case VK_ERROR_UNKNOWN:
+        return "VK_ERROR_UNKNOWN";
+    case VK_ERROR_SURFACE_LOST_KHR:
+        return "VK_ERROR_SURFACE_LOST_KHR";
+    case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR:
+        return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR";
+    case VK_SUBOPTIMAL_KHR:
+        return "VK_SUBOPTIMAL_KHR";
+    case VK_ERROR_OUT_OF_DATE_KHR:
+        return "VK_ERROR_OUT_OF_DATE_KHR";
+    case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR:
+        return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR";
+    case VK_ERROR_VALIDATION_FAILED_EXT:
+        return "VK_ERROR_VALIDATION_FAILED_EXT";
+    case VK_ERROR_INVALID_SHADER_NV:
+        return "VK_ERROR_INVALID_SHADER_NV";
+    case VK_ERROR_OUT_OF_POOL_MEMORY:
+        return "VK_ERROR_OUT_OF_POOL_MEMORY";
+    case VK_ERROR_INVALID_EXTERNAL_HANDLE:
+        return "VK_ERROR_INVALID_EXTERNAL_HANDLE";
+    case VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT:
+        return "VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT";
+    case VK_ERROR_FRAGMENTATION:
+        return "VK_ERROR_FRAGMENTATION";
+    case VK_ERROR_NOT_PERMITTED_EXT:
+        return "VK_ERROR_NOT_PERMITTED_EXT";
+    case VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS:
+        return "VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS";
+    case VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT:
+        return "VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT";
+    case VK_THREAD_IDLE_KHR:
+        return "VK_THREAD_IDLE_KHR";
+    case VK_THREAD_DONE_KHR:
+        return "VK_THREAD_DONE_KHR";
+    case VK_OPERATION_DEFERRED_KHR:
+        return "VK_OPERATION_DEFERRED_KHR";
+    case VK_OPERATION_NOT_DEFERRED_KHR:
+        return "VK_OPERATION_NOT_DEFERRED_KHR";
+    case VK_PIPELINE_COMPILE_REQUIRED_EXT:
+        return "VK_PIPELINE_COMPILE_REQUIRED_EXT";
+
+    default:
+        if (ev > 0)
+            return "(unrecognized positive VkResult value)";
+        else
+            return "(unrecognized negative VkResult value)";
+    }
+}
+
+const VulkanErrCategory vulkanErrCategory{};
+
+} // namespace
+
+std::error_code make_error_code(VkResult e) {
+    return {static_cast<int>(e), vulkanErrCategory};
+}
+
+#endif // VK_ERROR_CODE_CONFIG_MAIN
+#endif // VK_ERROR_CODE_V198_HPP
diff --git a/include/detail_struct_cleanup/vk_struct_cleanup_v198.hpp b/include/detail_struct_cleanup/vk_struct_cleanup_v198.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..28eb91c2ed4ca9d432cbf042e01a3aa570e0b870
--- /dev/null
+++ b/include/detail_struct_cleanup/vk_struct_cleanup_v198.hpp
@@ -0,0 +1,7929 @@
+/*
+    Copyright (C) 2020 George Cave - gcave@stablecoder.ca
+
+    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.
+*/
+
+/*
+    This file was auto-generated by the Vulkan mini-libs utility can be found at
+    https://github.com/stablecoder/vulkan-mini-libs.git
+    or
+    https://git.stabletec.com/utilities/vulkan-mini-libs.git
+
+    Check for an updated version anytime, or state concerns/bugs.
+*/
+
+#ifndef VK_STRUCT_CLEANUP_V198_HPP
+#define VK_STRUCT_CLEANUP_V198_HPP
+
+/*  USAGE:
+    To use, include this header where the declarations for the boolean checks are required.
+
+    On *ONE* compilation unit, include the definition of `#define VK_STRUCT_CLEANUP_CONFIG_MAIN`
+    so that the definitions are compiled somewhere following the one definition rule.
+*/
+
+#include <vulkan/vulkan.h>
+
+static_assert(VK_HEADER_VERSION == 198, "Incompatible VK_HEADER_VERSION!" );
+
+/** @brief Cleans up a Vulkan sType-based structure of pointer data
+ * @param pData Pointer to the struct to be cleaned up
+ * 
+ * This function is only to be called on Vulkan structures that *have* a VkStructureType
+ * member 'sType'. Any pointer members that start with 'p[A-Z]' are assumed to be *owned*
+ * by the struct and are themselves cleaned up recusrively, and then deleted.
+ *
+ * This means any other pointer members, or pointer to pointer members are not cleaned up
+ * and would still require manual deletion.
+ */
+void vk_struct_cleanup(void const* pData);
+
+#ifdef VK_STRUCT_CLEANUP_CONFIG_MAIN
+
+#include <cstdlib>
+
+void vk_struct_cleanup(void const *pData) {
+    if (pData == nullptr)
+        return;
+
+    struct VkTempStruct {
+        VkStructureType sType;
+    };
+    VkTempStruct const *pTemp = static_cast<VkTempStruct const *>(pData);
+
+    switch (pTemp->sType) {
+    case VK_STRUCTURE_TYPE_APPLICATION_INFO:
+        {   // VkApplicationInfo
+            VkApplicationInfo const *pStruct = static_cast<VkApplicationInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // char - pApplicationName / null-terminated
+            free(const_cast<char *>(pStruct->pApplicationName));
+
+            // char - pEngineName / null-terminated
+            free(const_cast<char *>(pStruct->pEngineName));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO:
+        {   // VkDeviceQueueCreateInfo
+            VkDeviceQueueCreateInfo const *pStruct = static_cast<VkDeviceQueueCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // float - pQueuePriorities / queueCount
+            free(const_cast<float *>(pStruct->pQueuePriorities));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:
+        {   // VkDeviceCreateInfo
+            VkDeviceCreateInfo const *pStruct = static_cast<VkDeviceCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDeviceQueueCreateInfo - pQueueCreateInfos / queueCreateInfoCount
+            for (uint32_t i = 0; i < pStruct->queueCreateInfoCount; ++i)
+                vk_struct_cleanup(&pStruct->pQueueCreateInfos[i]);
+            free(const_cast<VkDeviceQueueCreateInfo *>(pStruct->pQueueCreateInfos));
+
+            // VkPhysicalDeviceFeatures - pEnabledFeatures
+            free(const_cast<VkPhysicalDeviceFeatures *>(pStruct->pEnabledFeatures));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO:
+        {   // VkInstanceCreateInfo
+            VkInstanceCreateInfo const *pStruct = static_cast<VkInstanceCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkApplicationInfo - pApplicationInfo
+            vk_struct_cleanup(pStruct->pApplicationInfo);
+            free(const_cast<VkApplicationInfo *>(pStruct->pApplicationInfo));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+        {   // VkMemoryAllocateInfo
+            VkMemoryAllocateInfo const *pStruct = static_cast<VkMemoryAllocateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE:
+        {   // VkMappedMemoryRange
+            VkMappedMemoryRange const *pStruct = static_cast<VkMappedMemoryRange const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:
+        {   // VkWriteDescriptorSet
+            VkWriteDescriptorSet const *pStruct = static_cast<VkWriteDescriptorSet const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDescriptorImageInfo - pImageInfo / descriptorCount
+            free(const_cast<VkDescriptorImageInfo *>(pStruct->pImageInfo));
+
+            // VkDescriptorBufferInfo - pBufferInfo / descriptorCount
+            free(const_cast<VkDescriptorBufferInfo *>(pStruct->pBufferInfo));
+
+            // VkBufferView - pTexelBufferView / descriptorCount
+            free(const_cast<VkBufferView *>(pStruct->pTexelBufferView));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET:
+        {   // VkCopyDescriptorSet
+            VkCopyDescriptorSet const *pStruct = static_cast<VkCopyDescriptorSet const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO:
+        {   // VkBufferCreateInfo
+            VkBufferCreateInfo const *pStruct = static_cast<VkBufferCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pQueueFamilyIndices / queueFamilyIndexCount
+            free(const_cast<uint32_t *>(pStruct->pQueueFamilyIndices));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO:
+        {   // VkBufferViewCreateInfo
+            VkBufferViewCreateInfo const *pStruct = static_cast<VkBufferViewCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_BARRIER:
+        {   // VkMemoryBarrier
+            VkMemoryBarrier const *pStruct = static_cast<VkMemoryBarrier const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:
+        {   // VkBufferMemoryBarrier
+            VkBufferMemoryBarrier const *pStruct = static_cast<VkBufferMemoryBarrier const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER:
+        {   // VkImageMemoryBarrier
+            VkImageMemoryBarrier const *pStruct = static_cast<VkImageMemoryBarrier const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO:
+        {   // VkImageCreateInfo
+            VkImageCreateInfo const *pStruct = static_cast<VkImageCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pQueueFamilyIndices / queueFamilyIndexCount
+            free(const_cast<uint32_t *>(pStruct->pQueueFamilyIndices));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO:
+        {   // VkImageViewCreateInfo
+            VkImageViewCreateInfo const *pStruct = static_cast<VkImageViewCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO:
+        {   // VkBindSparseInfo
+            VkBindSparseInfo const *pStruct = static_cast<VkBindSparseInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSemaphore - pWaitSemaphores / waitSemaphoreCount
+            free(const_cast<VkSemaphore *>(pStruct->pWaitSemaphores));
+
+            // VkSparseBufferMemoryBindInfo - pBufferBinds / bufferBindCount
+            free(const_cast<VkSparseBufferMemoryBindInfo *>(pStruct->pBufferBinds));
+
+            // VkSparseImageOpaqueMemoryBindInfo - pImageOpaqueBinds / imageOpaqueBindCount
+            free(const_cast<VkSparseImageOpaqueMemoryBindInfo *>(pStruct->pImageOpaqueBinds));
+
+            // VkSparseImageMemoryBindInfo - pImageBinds / imageBindCount
+            free(const_cast<VkSparseImageMemoryBindInfo *>(pStruct->pImageBinds));
+
+            // VkSemaphore - pSignalSemaphores / signalSemaphoreCount
+            free(const_cast<VkSemaphore *>(pStruct->pSignalSemaphores));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:
+        {   // VkShaderModuleCreateInfo
+            VkShaderModuleCreateInfo const *pStruct = static_cast<VkShaderModuleCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pCode / codeSize
+            free(const_cast<uint32_t *>(pStruct->pCode));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO:
+        {   // VkDescriptorSetLayoutCreateInfo
+            VkDescriptorSetLayoutCreateInfo const *pStruct = static_cast<VkDescriptorSetLayoutCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDescriptorSetLayoutBinding - pBindings / bindingCount
+            free(const_cast<VkDescriptorSetLayoutBinding *>(pStruct->pBindings));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO:
+        {   // VkDescriptorPoolCreateInfo
+            VkDescriptorPoolCreateInfo const *pStruct = static_cast<VkDescriptorPoolCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDescriptorPoolSize - pPoolSizes / poolSizeCount
+            free(const_cast<VkDescriptorPoolSize *>(pStruct->pPoolSizes));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO:
+        {   // VkDescriptorSetAllocateInfo
+            VkDescriptorSetAllocateInfo const *pStruct = static_cast<VkDescriptorSetAllocateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDescriptorSetLayout - pSetLayouts / descriptorSetCount
+            free(const_cast<VkDescriptorSetLayout *>(pStruct->pSetLayouts));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO:
+        {   // VkPipelineShaderStageCreateInfo
+            VkPipelineShaderStageCreateInfo const *pStruct = static_cast<VkPipelineShaderStageCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // char - pName / null-terminated
+            free(const_cast<char *>(pStruct->pName));
+
+            // VkSpecializationInfo - pSpecializationInfo
+            free(const_cast<VkSpecializationInfo *>(pStruct->pSpecializationInfo));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO:
+        {   // VkComputePipelineCreateInfo
+            VkComputePipelineCreateInfo const *pStruct = static_cast<VkComputePipelineCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO:
+        {   // VkPipelineVertexInputStateCreateInfo
+            VkPipelineVertexInputStateCreateInfo const *pStruct = static_cast<VkPipelineVertexInputStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVertexInputBindingDescription - pVertexBindingDescriptions / vertexBindingDescriptionCount
+            free(const_cast<VkVertexInputBindingDescription *>(pStruct->pVertexBindingDescriptions));
+
+            // VkVertexInputAttributeDescription - pVertexAttributeDescriptions / vertexAttributeDescriptionCount
+            free(const_cast<VkVertexInputAttributeDescription *>(pStruct->pVertexAttributeDescriptions));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO:
+        {   // VkPipelineInputAssemblyStateCreateInfo
+            VkPipelineInputAssemblyStateCreateInfo const *pStruct = static_cast<VkPipelineInputAssemblyStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO:
+        {   // VkPipelineTessellationStateCreateInfo
+            VkPipelineTessellationStateCreateInfo const *pStruct = static_cast<VkPipelineTessellationStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO:
+        {   // VkPipelineViewportStateCreateInfo
+            VkPipelineViewportStateCreateInfo const *pStruct = static_cast<VkPipelineViewportStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkViewport - pViewports / viewportCount
+            free(const_cast<VkViewport *>(pStruct->pViewports));
+
+            // VkRect2D - pScissors / scissorCount
+            free(const_cast<VkRect2D *>(pStruct->pScissors));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO:
+        {   // VkPipelineRasterizationStateCreateInfo
+            VkPipelineRasterizationStateCreateInfo const *pStruct = static_cast<VkPipelineRasterizationStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO:
+        {   // VkPipelineMultisampleStateCreateInfo
+            VkPipelineMultisampleStateCreateInfo const *pStruct = static_cast<VkPipelineMultisampleStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSampleMask - pSampleMask / rasterizationSamples
+            free(const_cast<VkSampleMask *>(pStruct->pSampleMask));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO:
+        {   // VkPipelineColorBlendStateCreateInfo
+            VkPipelineColorBlendStateCreateInfo const *pStruct = static_cast<VkPipelineColorBlendStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPipelineColorBlendAttachmentState - pAttachments / attachmentCount
+            free(const_cast<VkPipelineColorBlendAttachmentState *>(pStruct->pAttachments));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO:
+        {   // VkPipelineDynamicStateCreateInfo
+            VkPipelineDynamicStateCreateInfo const *pStruct = static_cast<VkPipelineDynamicStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDynamicState - pDynamicStates / dynamicStateCount
+            free(const_cast<VkDynamicState *>(pStruct->pDynamicStates));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO:
+        {   // VkPipelineDepthStencilStateCreateInfo
+            VkPipelineDepthStencilStateCreateInfo const *pStruct = static_cast<VkPipelineDepthStencilStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO:
+        {   // VkGraphicsPipelineCreateInfo
+            VkGraphicsPipelineCreateInfo const *pStruct = static_cast<VkGraphicsPipelineCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPipelineShaderStageCreateInfo - pStages / stageCount
+            for (uint32_t i = 0; i < pStruct->stageCount; ++i)
+                vk_struct_cleanup(&pStruct->pStages[i]);
+            free(const_cast<VkPipelineShaderStageCreateInfo *>(pStruct->pStages));
+
+            // VkPipelineVertexInputStateCreateInfo - pVertexInputState
+            vk_struct_cleanup(pStruct->pVertexInputState);
+            free(const_cast<VkPipelineVertexInputStateCreateInfo *>(pStruct->pVertexInputState));
+
+            // VkPipelineInputAssemblyStateCreateInfo - pInputAssemblyState
+            vk_struct_cleanup(pStruct->pInputAssemblyState);
+            free(const_cast<VkPipelineInputAssemblyStateCreateInfo *>(pStruct->pInputAssemblyState));
+
+            // VkPipelineTessellationStateCreateInfo - pTessellationState
+            vk_struct_cleanup(pStruct->pTessellationState);
+            free(const_cast<VkPipelineTessellationStateCreateInfo *>(pStruct->pTessellationState));
+
+            // VkPipelineViewportStateCreateInfo - pViewportState
+            vk_struct_cleanup(pStruct->pViewportState);
+            free(const_cast<VkPipelineViewportStateCreateInfo *>(pStruct->pViewportState));
+
+            // VkPipelineRasterizationStateCreateInfo - pRasterizationState
+            vk_struct_cleanup(pStruct->pRasterizationState);
+            free(const_cast<VkPipelineRasterizationStateCreateInfo *>(pStruct->pRasterizationState));
+
+            // VkPipelineMultisampleStateCreateInfo - pMultisampleState
+            vk_struct_cleanup(pStruct->pMultisampleState);
+            free(const_cast<VkPipelineMultisampleStateCreateInfo *>(pStruct->pMultisampleState));
+
+            // VkPipelineDepthStencilStateCreateInfo - pDepthStencilState
+            vk_struct_cleanup(pStruct->pDepthStencilState);
+            free(const_cast<VkPipelineDepthStencilStateCreateInfo *>(pStruct->pDepthStencilState));
+
+            // VkPipelineColorBlendStateCreateInfo - pColorBlendState
+            vk_struct_cleanup(pStruct->pColorBlendState);
+            free(const_cast<VkPipelineColorBlendStateCreateInfo *>(pStruct->pColorBlendState));
+
+            // VkPipelineDynamicStateCreateInfo - pDynamicState
+            vk_struct_cleanup(pStruct->pDynamicState);
+            free(const_cast<VkPipelineDynamicStateCreateInfo *>(pStruct->pDynamicState));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO:
+        {   // VkPipelineCacheCreateInfo
+            VkPipelineCacheCreateInfo const *pStruct = static_cast<VkPipelineCacheCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pInitialData / initialDataSize
+            free(const_cast<void *>(pStruct->pInitialData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:
+        {   // VkPipelineLayoutCreateInfo
+            VkPipelineLayoutCreateInfo const *pStruct = static_cast<VkPipelineLayoutCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDescriptorSetLayout - pSetLayouts / setLayoutCount
+            free(const_cast<VkDescriptorSetLayout *>(pStruct->pSetLayouts));
+
+            // VkPushConstantRange - pPushConstantRanges / pushConstantRangeCount
+            free(const_cast<VkPushConstantRange *>(pStruct->pPushConstantRanges));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO:
+        {   // VkSamplerCreateInfo
+            VkSamplerCreateInfo const *pStruct = static_cast<VkSamplerCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO:
+        {   // VkCommandPoolCreateInfo
+            VkCommandPoolCreateInfo const *pStruct = static_cast<VkCommandPoolCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO:
+        {   // VkCommandBufferAllocateInfo
+            VkCommandBufferAllocateInfo const *pStruct = static_cast<VkCommandBufferAllocateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO:
+        {   // VkCommandBufferInheritanceInfo
+            VkCommandBufferInheritanceInfo const *pStruct = static_cast<VkCommandBufferInheritanceInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO:
+        {   // VkCommandBufferBeginInfo
+            VkCommandBufferBeginInfo const *pStruct = static_cast<VkCommandBufferBeginInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkCommandBufferInheritanceInfo - pInheritanceInfo
+            vk_struct_cleanup(pStruct->pInheritanceInfo);
+            free(const_cast<VkCommandBufferInheritanceInfo *>(pStruct->pInheritanceInfo));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO:
+        {   // VkRenderPassBeginInfo
+            VkRenderPassBeginInfo const *pStruct = static_cast<VkRenderPassBeginInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkClearValue - pClearValues / clearValueCount
+            free(const_cast<VkClearValue *>(pStruct->pClearValues));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:
+        {   // VkRenderPassCreateInfo
+            VkRenderPassCreateInfo const *pStruct = static_cast<VkRenderPassCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkAttachmentDescription - pAttachments / attachmentCount
+            free(const_cast<VkAttachmentDescription *>(pStruct->pAttachments));
+
+            // VkSubpassDescription - pSubpasses / subpassCount
+            free(const_cast<VkSubpassDescription *>(pStruct->pSubpasses));
+
+            // VkSubpassDependency - pDependencies / dependencyCount
+            free(const_cast<VkSubpassDependency *>(pStruct->pDependencies));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO:
+        {   // VkEventCreateInfo
+            VkEventCreateInfo const *pStruct = static_cast<VkEventCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FENCE_CREATE_INFO:
+        {   // VkFenceCreateInfo
+            VkFenceCreateInfo const *pStruct = static_cast<VkFenceCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO:
+        {   // VkSemaphoreCreateInfo
+            VkSemaphoreCreateInfo const *pStruct = static_cast<VkSemaphoreCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO:
+        {   // VkQueryPoolCreateInfo
+            VkQueryPoolCreateInfo const *pStruct = static_cast<VkQueryPoolCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO:
+        {   // VkFramebufferCreateInfo
+            VkFramebufferCreateInfo const *pStruct = static_cast<VkFramebufferCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkImageView - pAttachments / attachmentCount
+            free(const_cast<VkImageView *>(pStruct->pAttachments));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SUBMIT_INFO:
+        {   // VkSubmitInfo
+            VkSubmitInfo const *pStruct = static_cast<VkSubmitInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSemaphore - pWaitSemaphores / waitSemaphoreCount
+            free(const_cast<VkSemaphore *>(pStruct->pWaitSemaphores));
+
+            // VkPipelineStageFlags - pWaitDstStageMask / waitSemaphoreCount
+            free(const_cast<VkPipelineStageFlags *>(pStruct->pWaitDstStageMask));
+
+            // VkCommandBuffer - pCommandBuffers / commandBufferCount
+            free(const_cast<VkCommandBuffer *>(pStruct->pCommandBuffers));
+
+            // VkSemaphore - pSignalSemaphores / signalSemaphoreCount
+            free(const_cast<VkSemaphore *>(pStruct->pSignalSemaphores));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR:
+        {   // VkDisplayModeCreateInfoKHR
+            VkDisplayModeCreateInfoKHR const *pStruct = static_cast<VkDisplayModeCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR:
+        {   // VkDisplaySurfaceCreateInfoKHR
+            VkDisplaySurfaceCreateInfoKHR const *pStruct = static_cast<VkDisplaySurfaceCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:
+        {   // VkDisplayPresentInfoKHR
+            VkDisplayPresentInfoKHR const *pStruct = static_cast<VkDisplayPresentInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR:
+        {   // VkAndroidSurfaceCreateInfoKHR
+            VkAndroidSurfaceCreateInfoKHR const *pStruct = static_cast<VkAndroidSurfaceCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_VI_NN
+    case VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN:
+        {   // VkViSurfaceCreateInfoNN
+            VkViSurfaceCreateInfoNN const *pStruct = static_cast<VkViSurfaceCreateInfoNN const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_VI_NN
+
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+    case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR:
+        {   // VkWaylandSurfaceCreateInfoKHR
+            VkWaylandSurfaceCreateInfoKHR const *pStruct = static_cast<VkWaylandSurfaceCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WAYLAND_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR:
+        {   // VkWin32SurfaceCreateInfoKHR
+            VkWin32SurfaceCreateInfoKHR const *pStruct = static_cast<VkWin32SurfaceCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+    case VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR:
+        {   // VkXlibSurfaceCreateInfoKHR
+            VkXlibSurfaceCreateInfoKHR const *pStruct = static_cast<VkXlibSurfaceCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_XLIB_KHR
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+    case VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR:
+        {   // VkXcbSurfaceCreateInfoKHR
+            VkXcbSurfaceCreateInfoKHR const *pStruct = static_cast<VkXcbSurfaceCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_XCB_KHR
+
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+    case VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT:
+        {   // VkDirectFBSurfaceCreateInfoEXT
+            VkDirectFBSurfaceCreateInfoEXT const *pStruct = static_cast<VkDirectFBSurfaceCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_DIRECTFB_EXT
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA:
+        {   // VkImagePipeSurfaceCreateInfoFUCHSIA
+            VkImagePipeSurfaceCreateInfoFUCHSIA const *pStruct = static_cast<VkImagePipeSurfaceCreateInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_GGP
+    case VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP:
+        {   // VkStreamDescriptorSurfaceCreateInfoGGP
+            VkStreamDescriptorSurfaceCreateInfoGGP const *pStruct = static_cast<VkStreamDescriptorSurfaceCreateInfoGGP const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_GGP
+
+#ifdef VK_USE_PLATFORM_SCREEN_QNX
+    case VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX:
+        {   // VkScreenSurfaceCreateInfoQNX
+            VkScreenSurfaceCreateInfoQNX const *pStruct = static_cast<VkScreenSurfaceCreateInfoQNX const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_SCREEN_QNX
+
+    case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR:
+        {   // VkSwapchainCreateInfoKHR
+            VkSwapchainCreateInfoKHR const *pStruct = static_cast<VkSwapchainCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pQueueFamilyIndices / queueFamilyIndexCount
+            free(const_cast<uint32_t *>(pStruct->pQueueFamilyIndices));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PRESENT_INFO_KHR:
+        {   // VkPresentInfoKHR
+            VkPresentInfoKHR const *pStruct = static_cast<VkPresentInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSemaphore - pWaitSemaphores / waitSemaphoreCount
+            free(const_cast<VkSemaphore *>(pStruct->pWaitSemaphores));
+
+            // VkSwapchainKHR - pSwapchains / swapchainCount
+            free(const_cast<VkSwapchainKHR *>(pStruct->pSwapchains));
+
+            // uint32_t - pImageIndices / swapchainCount
+            free(const_cast<uint32_t *>(pStruct->pImageIndices));
+
+            // VkResult - pResults / swapchainCount
+            free(const_cast<VkResult *>(pStruct->pResults));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:
+        {   // VkDebugReportCallbackCreateInfoEXT
+            VkDebugReportCallbackCreateInfoEXT const *pStruct = static_cast<VkDebugReportCallbackCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pUserData
+            free(const_cast<void *>(pStruct->pUserData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:
+        {   // VkValidationFlagsEXT
+            VkValidationFlagsEXT const *pStruct = static_cast<VkValidationFlagsEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkValidationCheckEXT - pDisabledValidationChecks / disabledValidationCheckCount
+            free(const_cast<VkValidationCheckEXT *>(pStruct->pDisabledValidationChecks));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT:
+        {   // VkValidationFeaturesEXT
+            VkValidationFeaturesEXT const *pStruct = static_cast<VkValidationFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkValidationFeatureEnableEXT - pEnabledValidationFeatures / enabledValidationFeatureCount
+            free(const_cast<VkValidationFeatureEnableEXT *>(pStruct->pEnabledValidationFeatures));
+
+            // VkValidationFeatureDisableEXT - pDisabledValidationFeatures / disabledValidationFeatureCount
+            free(const_cast<VkValidationFeatureDisableEXT *>(pStruct->pDisabledValidationFeatures));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:
+        {   // VkPipelineRasterizationStateRasterizationOrderAMD
+            VkPipelineRasterizationStateRasterizationOrderAMD const *pStruct = static_cast<VkPipelineRasterizationStateRasterizationOrderAMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT:
+        {   // VkDebugMarkerObjectNameInfoEXT
+            VkDebugMarkerObjectNameInfoEXT const *pStruct = static_cast<VkDebugMarkerObjectNameInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // char - pObjectName / null-terminated
+            free(const_cast<char *>(pStruct->pObjectName));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT:
+        {   // VkDebugMarkerObjectTagInfoEXT
+            VkDebugMarkerObjectTagInfoEXT const *pStruct = static_cast<VkDebugMarkerObjectTagInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pTag / tagSize
+            free(const_cast<void *>(pStruct->pTag));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT:
+        {   // VkDebugMarkerMarkerInfoEXT
+            VkDebugMarkerMarkerInfoEXT const *pStruct = static_cast<VkDebugMarkerMarkerInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // char - pMarkerName / null-terminated
+            free(const_cast<char *>(pStruct->pMarkerName));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:
+        {   // VkDedicatedAllocationImageCreateInfoNV
+            VkDedicatedAllocationImageCreateInfoNV const *pStruct = static_cast<VkDedicatedAllocationImageCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
+        {   // VkDedicatedAllocationBufferCreateInfoNV
+            VkDedicatedAllocationBufferCreateInfoNV const *pStruct = static_cast<VkDedicatedAllocationBufferCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
+        {   // VkDedicatedAllocationMemoryAllocateInfoNV
+            VkDedicatedAllocationMemoryAllocateInfoNV const *pStruct = static_cast<VkDedicatedAllocationMemoryAllocateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:
+        {   // VkExternalMemoryImageCreateInfoNV
+            VkExternalMemoryImageCreateInfoNV const *pStruct = static_cast<VkExternalMemoryImageCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:
+        {   // VkExportMemoryAllocateInfoNV
+            VkExportMemoryAllocateInfoNV const *pStruct = static_cast<VkExportMemoryAllocateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:
+        {   // VkImportMemoryWin32HandleInfoNV
+            VkImportMemoryWin32HandleInfoNV const *pStruct = static_cast<VkImportMemoryWin32HandleInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:
+        {   // VkExportMemoryWin32HandleInfoNV
+            VkExportMemoryWin32HandleInfoNV const *pStruct = static_cast<VkExportMemoryWin32HandleInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // SECURITY_ATTRIBUTES - pAttributes
+            free(const_cast<SECURITY_ATTRIBUTES *>(pStruct->pAttributes));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:
+        {   // VkWin32KeyedMutexAcquireReleaseInfoNV
+            VkWin32KeyedMutexAcquireReleaseInfoNV const *pStruct = static_cast<VkWin32KeyedMutexAcquireReleaseInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDeviceMemory - pAcquireSyncs / acquireCount
+            free(const_cast<VkDeviceMemory *>(pStruct->pAcquireSyncs));
+
+            // uint64_t - pAcquireKeys / acquireCount
+            free(const_cast<uint64_t *>(pStruct->pAcquireKeys));
+
+            // uint32_t - pAcquireTimeoutMilliseconds / acquireCount
+            free(const_cast<uint32_t *>(pStruct->pAcquireTimeoutMilliseconds));
+
+            // VkDeviceMemory - pReleaseSyncs / releaseCount
+            free(const_cast<VkDeviceMemory *>(pStruct->pReleaseSyncs));
+
+            // uint64_t - pReleaseKeys / releaseCount
+            free(const_cast<uint64_t *>(pStruct->pReleaseKeys));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV:
+        {   // VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV
+            VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT:
+        {   // VkDevicePrivateDataCreateInfoEXT
+            VkDevicePrivateDataCreateInfoEXT const *pStruct = static_cast<VkDevicePrivateDataCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT:
+        {   // VkPrivateDataSlotCreateInfoEXT
+            VkPrivateDataSlotCreateInfoEXT const *pStruct = static_cast<VkPrivateDataSlotCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT:
+        {   // VkPhysicalDevicePrivateDataFeaturesEXT
+            VkPhysicalDevicePrivateDataFeaturesEXT const *pStruct = static_cast<VkPhysicalDevicePrivateDataFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV:
+        {   // VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+            VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const *pStruct = static_cast<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceMultiDrawPropertiesEXT
+            VkPhysicalDeviceMultiDrawPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceMultiDrawPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV:
+        {   // VkGraphicsShaderGroupCreateInfoNV
+            VkGraphicsShaderGroupCreateInfoNV const *pStruct = static_cast<VkGraphicsShaderGroupCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPipelineShaderStageCreateInfo - pStages / stageCount
+            for (uint32_t i = 0; i < pStruct->stageCount; ++i)
+                vk_struct_cleanup(&pStruct->pStages[i]);
+            free(const_cast<VkPipelineShaderStageCreateInfo *>(pStruct->pStages));
+
+            // VkPipelineVertexInputStateCreateInfo - pVertexInputState
+            vk_struct_cleanup(pStruct->pVertexInputState);
+            free(const_cast<VkPipelineVertexInputStateCreateInfo *>(pStruct->pVertexInputState));
+
+            // VkPipelineTessellationStateCreateInfo - pTessellationState
+            vk_struct_cleanup(pStruct->pTessellationState);
+            free(const_cast<VkPipelineTessellationStateCreateInfo *>(pStruct->pTessellationState));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV:
+        {   // VkGraphicsPipelineShaderGroupsCreateInfoNV
+            VkGraphicsPipelineShaderGroupsCreateInfoNV const *pStruct = static_cast<VkGraphicsPipelineShaderGroupsCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkGraphicsShaderGroupCreateInfoNV - pGroups / groupCount
+            for (uint32_t i = 0; i < pStruct->groupCount; ++i)
+                vk_struct_cleanup(&pStruct->pGroups[i]);
+            free(const_cast<VkGraphicsShaderGroupCreateInfoNV *>(pStruct->pGroups));
+
+            // VkPipeline - pPipelines / pipelineCount
+            free(const_cast<VkPipeline *>(pStruct->pPipelines));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV:
+        {   // VkIndirectCommandsLayoutTokenNV
+            VkIndirectCommandsLayoutTokenNV const *pStruct = static_cast<VkIndirectCommandsLayoutTokenNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkIndexType - pIndexTypes / indexTypeCount
+            free(const_cast<VkIndexType *>(pStruct->pIndexTypes));
+
+            // uint32_t - pIndexTypeValues / indexTypeCount
+            free(const_cast<uint32_t *>(pStruct->pIndexTypeValues));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV:
+        {   // VkIndirectCommandsLayoutCreateInfoNV
+            VkIndirectCommandsLayoutCreateInfoNV const *pStruct = static_cast<VkIndirectCommandsLayoutCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkIndirectCommandsLayoutTokenNV - pTokens / tokenCount
+            for (uint32_t i = 0; i < pStruct->tokenCount; ++i)
+                vk_struct_cleanup(&pStruct->pTokens[i]);
+            free(const_cast<VkIndirectCommandsLayoutTokenNV *>(pStruct->pTokens));
+
+            // uint32_t - pStreamStrides / streamCount
+            free(const_cast<uint32_t *>(pStruct->pStreamStrides));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV:
+        {   // VkGeneratedCommandsInfoNV
+            VkGeneratedCommandsInfoNV const *pStruct = static_cast<VkGeneratedCommandsInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkIndirectCommandsStreamNV - pStreams / streamCount
+            free(const_cast<VkIndirectCommandsStreamNV *>(pStruct->pStreams));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV:
+        {   // VkGeneratedCommandsMemoryRequirementsInfoNV
+            VkGeneratedCommandsMemoryRequirementsInfoNV const *pStruct = static_cast<VkGeneratedCommandsMemoryRequirementsInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+        {   // VkPhysicalDeviceFeatures2
+            VkPhysicalDeviceFeatures2 const *pStruct = static_cast<VkPhysicalDeviceFeatures2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:
+        {   // VkPhysicalDeviceProperties2
+            VkPhysicalDeviceProperties2 const *pStruct = static_cast<VkPhysicalDeviceProperties2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2:
+        {   // VkFormatProperties2
+            VkFormatProperties2 const *pStruct = static_cast<VkFormatProperties2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2:
+        {   // VkImageFormatProperties2
+            VkImageFormatProperties2 const *pStruct = static_cast<VkImageFormatProperties2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2:
+        {   // VkPhysicalDeviceImageFormatInfo2
+            VkPhysicalDeviceImageFormatInfo2 const *pStruct = static_cast<VkPhysicalDeviceImageFormatInfo2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2:
+        {   // VkQueueFamilyProperties2
+            VkQueueFamilyProperties2 const *pStruct = static_cast<VkQueueFamilyProperties2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2:
+        {   // VkPhysicalDeviceMemoryProperties2
+            VkPhysicalDeviceMemoryProperties2 const *pStruct = static_cast<VkPhysicalDeviceMemoryProperties2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2:
+        {   // VkSparseImageFormatProperties2
+            VkSparseImageFormatProperties2 const *pStruct = static_cast<VkSparseImageFormatProperties2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2:
+        {   // VkPhysicalDeviceSparseImageFormatInfo2
+            VkPhysicalDeviceSparseImageFormatInfo2 const *pStruct = static_cast<VkPhysicalDeviceSparseImageFormatInfo2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
+        {   // VkPhysicalDevicePushDescriptorPropertiesKHR
+            VkPhysicalDevicePushDescriptorPropertiesKHR const *pStruct = static_cast<VkPhysicalDevicePushDescriptorPropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES:
+        {   // VkPhysicalDeviceDriverProperties
+            VkPhysicalDeviceDriverProperties const *pStruct = static_cast<VkPhysicalDeviceDriverProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:
+        {   // VkPresentRegionsKHR
+            VkPresentRegionsKHR const *pStruct = static_cast<VkPresentRegionsKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPresentRegionKHR - pRegions / swapchainCount
+            free(const_cast<VkPresentRegionKHR *>(pStruct->pRegions));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES:
+        {   // VkPhysicalDeviceVariablePointersFeatures
+            VkPhysicalDeviceVariablePointersFeatures const *pStruct = static_cast<VkPhysicalDeviceVariablePointersFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
+        {   // VkPhysicalDeviceExternalImageFormatInfo
+            VkPhysicalDeviceExternalImageFormatInfo const *pStruct = static_cast<VkPhysicalDeviceExternalImageFormatInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
+        {   // VkExternalImageFormatProperties
+            VkExternalImageFormatProperties const *pStruct = static_cast<VkExternalImageFormatProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO:
+        {   // VkPhysicalDeviceExternalBufferInfo
+            VkPhysicalDeviceExternalBufferInfo const *pStruct = static_cast<VkPhysicalDeviceExternalBufferInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES:
+        {   // VkExternalBufferProperties
+            VkExternalBufferProperties const *pStruct = static_cast<VkExternalBufferProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
+        {   // VkPhysicalDeviceIDProperties
+            VkPhysicalDeviceIDProperties const *pStruct = static_cast<VkPhysicalDeviceIDProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
+        {   // VkExternalMemoryImageCreateInfo
+            VkExternalMemoryImageCreateInfo const *pStruct = static_cast<VkExternalMemoryImageCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
+        {   // VkExternalMemoryBufferCreateInfo
+            VkExternalMemoryBufferCreateInfo const *pStruct = static_cast<VkExternalMemoryBufferCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
+        {   // VkExportMemoryAllocateInfo
+            VkExportMemoryAllocateInfo const *pStruct = static_cast<VkExportMemoryAllocateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
+        {   // VkImportMemoryWin32HandleInfoKHR
+            VkImportMemoryWin32HandleInfoKHR const *pStruct = static_cast<VkImportMemoryWin32HandleInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
+        {   // VkExportMemoryWin32HandleInfoKHR
+            VkExportMemoryWin32HandleInfoKHR const *pStruct = static_cast<VkExportMemoryWin32HandleInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // SECURITY_ATTRIBUTES - pAttributes
+            free(const_cast<SECURITY_ATTRIBUTES *>(pStruct->pAttributes));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA:
+        {   // VkImportMemoryZirconHandleInfoFUCHSIA
+            VkImportMemoryZirconHandleInfoFUCHSIA const *pStruct = static_cast<VkImportMemoryZirconHandleInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA:
+        {   // VkMemoryZirconHandlePropertiesFUCHSIA
+            VkMemoryZirconHandlePropertiesFUCHSIA const *pStruct = static_cast<VkMemoryZirconHandlePropertiesFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA:
+        {   // VkMemoryGetZirconHandleInfoFUCHSIA
+            VkMemoryGetZirconHandleInfoFUCHSIA const *pStruct = static_cast<VkMemoryGetZirconHandleInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR:
+        {   // VkMemoryWin32HandlePropertiesKHR
+            VkMemoryWin32HandlePropertiesKHR const *pStruct = static_cast<VkMemoryWin32HandlePropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR:
+        {   // VkMemoryGetWin32HandleInfoKHR
+            VkMemoryGetWin32HandleInfoKHR const *pStruct = static_cast<VkMemoryGetWin32HandleInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+    case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
+        {   // VkImportMemoryFdInfoKHR
+            VkImportMemoryFdInfoKHR const *pStruct = static_cast<VkImportMemoryFdInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR:
+        {   // VkMemoryFdPropertiesKHR
+            VkMemoryFdPropertiesKHR const *pStruct = static_cast<VkMemoryFdPropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR:
+        {   // VkMemoryGetFdInfoKHR
+            VkMemoryGetFdInfoKHR const *pStruct = static_cast<VkMemoryGetFdInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:
+        {   // VkWin32KeyedMutexAcquireReleaseInfoKHR
+            VkWin32KeyedMutexAcquireReleaseInfoKHR const *pStruct = static_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDeviceMemory - pAcquireSyncs / acquireCount
+            free(const_cast<VkDeviceMemory *>(pStruct->pAcquireSyncs));
+
+            // uint64_t - pAcquireKeys / acquireCount
+            free(const_cast<uint64_t *>(pStruct->pAcquireKeys));
+
+            // uint32_t - pAcquireTimeouts / acquireCount
+            free(const_cast<uint32_t *>(pStruct->pAcquireTimeouts));
+
+            // VkDeviceMemory - pReleaseSyncs / releaseCount
+            free(const_cast<VkDeviceMemory *>(pStruct->pReleaseSyncs));
+
+            // uint64_t - pReleaseKeys / releaseCount
+            free(const_cast<uint64_t *>(pStruct->pReleaseKeys));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO:
+        {   // VkPhysicalDeviceExternalSemaphoreInfo
+            VkPhysicalDeviceExternalSemaphoreInfo const *pStruct = static_cast<VkPhysicalDeviceExternalSemaphoreInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES:
+        {   // VkExternalSemaphoreProperties
+            VkExternalSemaphoreProperties const *pStruct = static_cast<VkExternalSemaphoreProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
+        {   // VkExportSemaphoreCreateInfo
+            VkExportSemaphoreCreateInfo const *pStruct = static_cast<VkExportSemaphoreCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
+        {   // VkImportSemaphoreWin32HandleInfoKHR
+            VkImportSemaphoreWin32HandleInfoKHR const *pStruct = static_cast<VkImportSemaphoreWin32HandleInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
+        {   // VkExportSemaphoreWin32HandleInfoKHR
+            VkExportSemaphoreWin32HandleInfoKHR const *pStruct = static_cast<VkExportSemaphoreWin32HandleInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // SECURITY_ATTRIBUTES - pAttributes
+            free(const_cast<SECURITY_ATTRIBUTES *>(pStruct->pAttributes));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:
+        {   // VkD3D12FenceSubmitInfoKHR
+            VkD3D12FenceSubmitInfoKHR const *pStruct = static_cast<VkD3D12FenceSubmitInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint64_t - pWaitSemaphoreValues / waitSemaphoreValuesCount
+            free(const_cast<uint64_t *>(pStruct->pWaitSemaphoreValues));
+
+            // uint64_t - pSignalSemaphoreValues / signalSemaphoreValuesCount
+            free(const_cast<uint64_t *>(pStruct->pSignalSemaphoreValues));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR:
+        {   // VkSemaphoreGetWin32HandleInfoKHR
+            VkSemaphoreGetWin32HandleInfoKHR const *pStruct = static_cast<VkSemaphoreGetWin32HandleInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+    case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR:
+        {   // VkImportSemaphoreFdInfoKHR
+            VkImportSemaphoreFdInfoKHR const *pStruct = static_cast<VkImportSemaphoreFdInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR:
+        {   // VkSemaphoreGetFdInfoKHR
+            VkSemaphoreGetFdInfoKHR const *pStruct = static_cast<VkSemaphoreGetFdInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA:
+        {   // VkImportSemaphoreZirconHandleInfoFUCHSIA
+            VkImportSemaphoreZirconHandleInfoFUCHSIA const *pStruct = static_cast<VkImportSemaphoreZirconHandleInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA:
+        {   // VkSemaphoreGetZirconHandleInfoFUCHSIA
+            VkSemaphoreGetZirconHandleInfoFUCHSIA const *pStruct = static_cast<VkSemaphoreGetZirconHandleInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO:
+        {   // VkPhysicalDeviceExternalFenceInfo
+            VkPhysicalDeviceExternalFenceInfo const *pStruct = static_cast<VkPhysicalDeviceExternalFenceInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES:
+        {   // VkExternalFenceProperties
+            VkExternalFenceProperties const *pStruct = static_cast<VkExternalFenceProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:
+        {   // VkExportFenceCreateInfo
+            VkExportFenceCreateInfo const *pStruct = static_cast<VkExportFenceCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR:
+        {   // VkImportFenceWin32HandleInfoKHR
+            VkImportFenceWin32HandleInfoKHR const *pStruct = static_cast<VkImportFenceWin32HandleInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:
+        {   // VkExportFenceWin32HandleInfoKHR
+            VkExportFenceWin32HandleInfoKHR const *pStruct = static_cast<VkExportFenceWin32HandleInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // SECURITY_ATTRIBUTES - pAttributes
+            free(const_cast<SECURITY_ATTRIBUTES *>(pStruct->pAttributes));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR:
+        {   // VkFenceGetWin32HandleInfoKHR
+            VkFenceGetWin32HandleInfoKHR const *pStruct = static_cast<VkFenceGetWin32HandleInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+    case VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR:
+        {   // VkImportFenceFdInfoKHR
+            VkImportFenceFdInfoKHR const *pStruct = static_cast<VkImportFenceFdInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR:
+        {   // VkFenceGetFdInfoKHR
+            VkFenceGetFdInfoKHR const *pStruct = static_cast<VkFenceGetFdInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
+        {   // VkPhysicalDeviceMultiviewFeatures
+            VkPhysicalDeviceMultiviewFeatures const *pStruct = static_cast<VkPhysicalDeviceMultiviewFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
+        {   // VkPhysicalDeviceMultiviewProperties
+            VkPhysicalDeviceMultiviewProperties const *pStruct = static_cast<VkPhysicalDeviceMultiviewProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
+        {   // VkRenderPassMultiviewCreateInfo
+            VkRenderPassMultiviewCreateInfo const *pStruct = static_cast<VkRenderPassMultiviewCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pViewMasks / subpassCount
+            free(const_cast<uint32_t *>(pStruct->pViewMasks));
+
+            // int32_t - pViewOffsets / dependencyCount
+            free(const_cast<int32_t *>(pStruct->pViewOffsets));
+
+            // uint32_t - pCorrelationMasks / correlationMaskCount
+            free(const_cast<uint32_t *>(pStruct->pCorrelationMasks));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT:
+        {   // VkSurfaceCapabilities2EXT
+            VkSurfaceCapabilities2EXT const *pStruct = static_cast<VkSurfaceCapabilities2EXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT:
+        {   // VkDisplayPowerInfoEXT
+            VkDisplayPowerInfoEXT const *pStruct = static_cast<VkDisplayPowerInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT:
+        {   // VkDeviceEventInfoEXT
+            VkDeviceEventInfoEXT const *pStruct = static_cast<VkDeviceEventInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT:
+        {   // VkDisplayEventInfoEXT
+            VkDisplayEventInfoEXT const *pStruct = static_cast<VkDisplayEventInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:
+        {   // VkSwapchainCounterCreateInfoEXT
+            VkSwapchainCounterCreateInfoEXT const *pStruct = static_cast<VkSwapchainCounterCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES:
+        {   // VkPhysicalDeviceGroupProperties
+            VkPhysicalDeviceGroupProperties const *pStruct = static_cast<VkPhysicalDeviceGroupProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
+        {   // VkMemoryAllocateFlagsInfo
+            VkMemoryAllocateFlagsInfo const *pStruct = static_cast<VkMemoryAllocateFlagsInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO:
+        {   // VkBindBufferMemoryInfo
+            VkBindBufferMemoryInfo const *pStruct = static_cast<VkBindBufferMemoryInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
+        {   // VkBindBufferMemoryDeviceGroupInfo
+            VkBindBufferMemoryDeviceGroupInfo const *pStruct = static_cast<VkBindBufferMemoryDeviceGroupInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pDeviceIndices / deviceIndexCount
+            free(const_cast<uint32_t *>(pStruct->pDeviceIndices));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO:
+        {   // VkBindImageMemoryInfo
+            VkBindImageMemoryInfo const *pStruct = static_cast<VkBindImageMemoryInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
+        {   // VkBindImageMemoryDeviceGroupInfo
+            VkBindImageMemoryDeviceGroupInfo const *pStruct = static_cast<VkBindImageMemoryDeviceGroupInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pDeviceIndices / deviceIndexCount
+            free(const_cast<uint32_t *>(pStruct->pDeviceIndices));
+
+            // VkRect2D - pSplitInstanceBindRegions / splitInstanceBindRegionCount
+            free(const_cast<VkRect2D *>(pStruct->pSplitInstanceBindRegions));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
+        {   // VkDeviceGroupRenderPassBeginInfo
+            VkDeviceGroupRenderPassBeginInfo const *pStruct = static_cast<VkDeviceGroupRenderPassBeginInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkRect2D - pDeviceRenderAreas / deviceRenderAreaCount
+            free(const_cast<VkRect2D *>(pStruct->pDeviceRenderAreas));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:
+        {   // VkDeviceGroupCommandBufferBeginInfo
+            VkDeviceGroupCommandBufferBeginInfo const *pStruct = static_cast<VkDeviceGroupCommandBufferBeginInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
+        {   // VkDeviceGroupSubmitInfo
+            VkDeviceGroupSubmitInfo const *pStruct = static_cast<VkDeviceGroupSubmitInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pWaitSemaphoreDeviceIndices / waitSemaphoreCount
+            free(const_cast<uint32_t *>(pStruct->pWaitSemaphoreDeviceIndices));
+
+            // uint32_t - pCommandBufferDeviceMasks / commandBufferCount
+            free(const_cast<uint32_t *>(pStruct->pCommandBufferDeviceMasks));
+
+            // uint32_t - pSignalSemaphoreDeviceIndices / signalSemaphoreCount
+            free(const_cast<uint32_t *>(pStruct->pSignalSemaphoreDeviceIndices));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
+        {   // VkDeviceGroupBindSparseInfo
+            VkDeviceGroupBindSparseInfo const *pStruct = static_cast<VkDeviceGroupBindSparseInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR:
+        {   // VkDeviceGroupPresentCapabilitiesKHR
+            VkDeviceGroupPresentCapabilitiesKHR const *pStruct = static_cast<VkDeviceGroupPresentCapabilitiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
+        {   // VkImageSwapchainCreateInfoKHR
+            VkImageSwapchainCreateInfoKHR const *pStruct = static_cast<VkImageSwapchainCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
+        {   // VkBindImageMemorySwapchainInfoKHR
+            VkBindImageMemorySwapchainInfoKHR const *pStruct = static_cast<VkBindImageMemorySwapchainInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR:
+        {   // VkAcquireNextImageInfoKHR
+            VkAcquireNextImageInfoKHR const *pStruct = static_cast<VkAcquireNextImageInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:
+        {   // VkDeviceGroupPresentInfoKHR
+            VkDeviceGroupPresentInfoKHR const *pStruct = static_cast<VkDeviceGroupPresentInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pDeviceMasks / swapchainCount
+            free(const_cast<uint32_t *>(pStruct->pDeviceMasks));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
+        {   // VkDeviceGroupDeviceCreateInfo
+            VkDeviceGroupDeviceCreateInfo const *pStruct = static_cast<VkDeviceGroupDeviceCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPhysicalDevice - pPhysicalDevices / physicalDeviceCount
+            free(const_cast<VkPhysicalDevice *>(pStruct->pPhysicalDevices));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
+        {   // VkDeviceGroupSwapchainCreateInfoKHR
+            VkDeviceGroupSwapchainCreateInfoKHR const *pStruct = static_cast<VkDeviceGroupSwapchainCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO:
+        {   // VkDescriptorUpdateTemplateCreateInfo
+            VkDescriptorUpdateTemplateCreateInfo const *pStruct = static_cast<VkDescriptorUpdateTemplateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDescriptorUpdateTemplateEntry - pDescriptorUpdateEntries / descriptorUpdateEntryCount
+            free(const_cast<VkDescriptorUpdateTemplateEntry *>(pStruct->pDescriptorUpdateEntries));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR:
+        {   // VkPhysicalDevicePresentIdFeaturesKHR
+            VkPhysicalDevicePresentIdFeaturesKHR const *pStruct = static_cast<VkPhysicalDevicePresentIdFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PRESENT_ID_KHR:
+        {   // VkPresentIdKHR
+            VkPresentIdKHR const *pStruct = static_cast<VkPresentIdKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint64_t - pPresentIds / swapchainCount
+            free(const_cast<uint64_t *>(pStruct->pPresentIds));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR:
+        {   // VkPhysicalDevicePresentWaitFeaturesKHR
+            VkPhysicalDevicePresentWaitFeaturesKHR const *pStruct = static_cast<VkPhysicalDevicePresentWaitFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_HDR_METADATA_EXT:
+        {   // VkHdrMetadataEXT
+            VkHdrMetadataEXT const *pStruct = static_cast<VkHdrMetadataEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD:
+        {   // VkDisplayNativeHdrSurfaceCapabilitiesAMD
+            VkDisplayNativeHdrSurfaceCapabilitiesAMD const *pStruct = static_cast<VkDisplayNativeHdrSurfaceCapabilitiesAMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD:
+        {   // VkSwapchainDisplayNativeHdrCreateInfoAMD
+            VkSwapchainDisplayNativeHdrCreateInfoAMD const *pStruct = static_cast<VkSwapchainDisplayNativeHdrCreateInfoAMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
+        {   // VkPresentTimesInfoGOOGLE
+            VkPresentTimesInfoGOOGLE const *pStruct = static_cast<VkPresentTimesInfoGOOGLE const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPresentTimeGOOGLE - pTimes / swapchainCount
+            free(const_cast<VkPresentTimeGOOGLE *>(pStruct->pTimes));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_IOS_MVK
+    case VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK:
+        {   // VkIOSSurfaceCreateInfoMVK
+            VkIOSSurfaceCreateInfoMVK const *pStruct = static_cast<VkIOSSurfaceCreateInfoMVK const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pView
+            free(const_cast<void *>(pStruct->pView));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_IOS_MVK
+
+#ifdef VK_USE_PLATFORM_MACOS_MVK
+    case VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK:
+        {   // VkMacOSSurfaceCreateInfoMVK
+            VkMacOSSurfaceCreateInfoMVK const *pStruct = static_cast<VkMacOSSurfaceCreateInfoMVK const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pView
+            free(const_cast<void *>(pStruct->pView));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_MACOS_MVK
+
+#ifdef VK_USE_PLATFORM_METAL_EXT
+    case VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT:
+        {   // VkMetalSurfaceCreateInfoEXT
+            VkMetalSurfaceCreateInfoEXT const *pStruct = static_cast<VkMetalSurfaceCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // CAMetalLayer - pLayer
+            free(const_cast<CAMetalLayer *>(pStruct->pLayer));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_METAL_EXT
+
+    case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV:
+        {   // VkPipelineViewportWScalingStateCreateInfoNV
+            VkPipelineViewportWScalingStateCreateInfoNV const *pStruct = static_cast<VkPipelineViewportWScalingStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkViewportWScalingNV - pViewportWScalings / viewportCount
+            free(const_cast<VkViewportWScalingNV *>(pStruct->pViewportWScalings));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:
+        {   // VkPipelineViewportSwizzleStateCreateInfoNV
+            VkPipelineViewportSwizzleStateCreateInfoNV const *pStruct = static_cast<VkPipelineViewportSwizzleStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkViewportSwizzleNV - pViewportSwizzles / viewportCount
+            free(const_cast<VkViewportSwizzleNV *>(pStruct->pViewportSwizzles));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceDiscardRectanglePropertiesEXT
+            VkPhysicalDeviceDiscardRectanglePropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
+        {   // VkPipelineDiscardRectangleStateCreateInfoEXT
+            VkPipelineDiscardRectangleStateCreateInfoEXT const *pStruct = static_cast<VkPipelineDiscardRectangleStateCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkRect2D - pDiscardRectangles / discardRectangleCount
+            free(const_cast<VkRect2D *>(pStruct->pDiscardRectangles));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX:
+        {   // VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+            VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const *pStruct = static_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
+        {   // VkRenderPassInputAttachmentAspectCreateInfo
+            VkRenderPassInputAttachmentAspectCreateInfo const *pStruct = static_cast<VkRenderPassInputAttachmentAspectCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkInputAttachmentAspectReference - pAspectReferences / aspectReferenceCount
+            free(const_cast<VkInputAttachmentAspectReference *>(pStruct->pAspectReferences));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR:
+        {   // VkPhysicalDeviceSurfaceInfo2KHR
+            VkPhysicalDeviceSurfaceInfo2KHR const *pStruct = static_cast<VkPhysicalDeviceSurfaceInfo2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR:
+        {   // VkSurfaceCapabilities2KHR
+            VkSurfaceCapabilities2KHR const *pStruct = static_cast<VkSurfaceCapabilities2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR:
+        {   // VkSurfaceFormat2KHR
+            VkSurfaceFormat2KHR const *pStruct = static_cast<VkSurfaceFormat2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR:
+        {   // VkDisplayProperties2KHR
+            VkDisplayProperties2KHR const *pStruct = static_cast<VkDisplayProperties2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR:
+        {   // VkDisplayPlaneProperties2KHR
+            VkDisplayPlaneProperties2KHR const *pStruct = static_cast<VkDisplayPlaneProperties2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR:
+        {   // VkDisplayModeProperties2KHR
+            VkDisplayModeProperties2KHR const *pStruct = static_cast<VkDisplayModeProperties2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR:
+        {   // VkDisplayPlaneInfo2KHR
+            VkDisplayPlaneInfo2KHR const *pStruct = static_cast<VkDisplayPlaneInfo2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR:
+        {   // VkDisplayPlaneCapabilities2KHR
+            VkDisplayPlaneCapabilities2KHR const *pStruct = static_cast<VkDisplayPlaneCapabilities2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:
+        {   // VkSharedPresentSurfaceCapabilitiesKHR
+            VkSharedPresentSurfaceCapabilitiesKHR const *pStruct = static_cast<VkSharedPresentSurfaceCapabilitiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
+        {   // VkPhysicalDevice16BitStorageFeatures
+            VkPhysicalDevice16BitStorageFeatures const *pStruct = static_cast<VkPhysicalDevice16BitStorageFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
+        {   // VkPhysicalDeviceSubgroupProperties
+            VkPhysicalDeviceSubgroupProperties const *pStruct = static_cast<VkPhysicalDeviceSubgroupProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:
+        {   // VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
+            VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const *pStruct = static_cast<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2:
+        {   // VkBufferMemoryRequirementsInfo2
+            VkBufferMemoryRequirementsInfo2 const *pStruct = static_cast<VkBufferMemoryRequirementsInfo2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR:
+        {   // VkDeviceBufferMemoryRequirementsKHR
+            VkDeviceBufferMemoryRequirementsKHR const *pStruct = static_cast<VkDeviceBufferMemoryRequirementsKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkBufferCreateInfo - pCreateInfo
+            vk_struct_cleanup(pStruct->pCreateInfo);
+            free(const_cast<VkBufferCreateInfo *>(pStruct->pCreateInfo));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2:
+        {   // VkImageMemoryRequirementsInfo2
+            VkImageMemoryRequirementsInfo2 const *pStruct = static_cast<VkImageMemoryRequirementsInfo2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2:
+        {   // VkImageSparseMemoryRequirementsInfo2
+            VkImageSparseMemoryRequirementsInfo2 const *pStruct = static_cast<VkImageSparseMemoryRequirementsInfo2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR:
+        {   // VkDeviceImageMemoryRequirementsKHR
+            VkDeviceImageMemoryRequirementsKHR const *pStruct = static_cast<VkDeviceImageMemoryRequirementsKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkImageCreateInfo - pCreateInfo
+            vk_struct_cleanup(pStruct->pCreateInfo);
+            free(const_cast<VkImageCreateInfo *>(pStruct->pCreateInfo));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2:
+        {   // VkMemoryRequirements2
+            VkMemoryRequirements2 const *pStruct = static_cast<VkMemoryRequirements2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2:
+        {   // VkSparseImageMemoryRequirements2
+            VkSparseImageMemoryRequirements2 const *pStruct = static_cast<VkSparseImageMemoryRequirements2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
+        {   // VkPhysicalDevicePointClippingProperties
+            VkPhysicalDevicePointClippingProperties const *pStruct = static_cast<VkPhysicalDevicePointClippingProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
+        {   // VkMemoryDedicatedRequirements
+            VkMemoryDedicatedRequirements const *pStruct = static_cast<VkMemoryDedicatedRequirements const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
+        {   // VkMemoryDedicatedAllocateInfo
+            VkMemoryDedicatedAllocateInfo const *pStruct = static_cast<VkMemoryDedicatedAllocateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
+        {   // VkImageViewUsageCreateInfo
+            VkImageViewUsageCreateInfo const *pStruct = static_cast<VkImageViewUsageCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
+        {   // VkPipelineTessellationDomainOriginStateCreateInfo
+            VkPipelineTessellationDomainOriginStateCreateInfo const *pStruct = static_cast<VkPipelineTessellationDomainOriginStateCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
+        {   // VkSamplerYcbcrConversionInfo
+            VkSamplerYcbcrConversionInfo const *pStruct = static_cast<VkSamplerYcbcrConversionInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO:
+        {   // VkSamplerYcbcrConversionCreateInfo
+            VkSamplerYcbcrConversionCreateInfo const *pStruct = static_cast<VkSamplerYcbcrConversionCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:
+        {   // VkBindImagePlaneMemoryInfo
+            VkBindImagePlaneMemoryInfo const *pStruct = static_cast<VkBindImagePlaneMemoryInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
+        {   // VkImagePlaneMemoryRequirementsInfo
+            VkImagePlaneMemoryRequirementsInfo const *pStruct = static_cast<VkImagePlaneMemoryRequirementsInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
+        {   // VkPhysicalDeviceSamplerYcbcrConversionFeatures
+            VkPhysicalDeviceSamplerYcbcrConversionFeatures const *pStruct = static_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
+        {   // VkSamplerYcbcrConversionImageFormatProperties
+            VkSamplerYcbcrConversionImageFormatProperties const *pStruct = static_cast<VkSamplerYcbcrConversionImageFormatProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
+        {   // VkTextureLODGatherFormatPropertiesAMD
+            VkTextureLODGatherFormatPropertiesAMD const *pStruct = static_cast<VkTextureLODGatherFormatPropertiesAMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT:
+        {   // VkConditionalRenderingBeginInfoEXT
+            VkConditionalRenderingBeginInfoEXT const *pStruct = static_cast<VkConditionalRenderingBeginInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
+        {   // VkProtectedSubmitInfo
+            VkProtectedSubmitInfo const *pStruct = static_cast<VkProtectedSubmitInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
+        {   // VkPhysicalDeviceProtectedMemoryFeatures
+            VkPhysicalDeviceProtectedMemoryFeatures const *pStruct = static_cast<VkPhysicalDeviceProtectedMemoryFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
+        {   // VkPhysicalDeviceProtectedMemoryProperties
+            VkPhysicalDeviceProtectedMemoryProperties const *pStruct = static_cast<VkPhysicalDeviceProtectedMemoryProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2:
+        {   // VkDeviceQueueInfo2
+            VkDeviceQueueInfo2 const *pStruct = static_cast<VkDeviceQueueInfo2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:
+        {   // VkPipelineCoverageToColorStateCreateInfoNV
+            VkPipelineCoverageToColorStateCreateInfoNV const *pStruct = static_cast<VkPipelineCoverageToColorStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES:
+        {   // VkPhysicalDeviceSamplerFilterMinmaxProperties
+            VkPhysicalDeviceSamplerFilterMinmaxProperties const *pStruct = static_cast<VkPhysicalDeviceSamplerFilterMinmaxProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:
+        {   // VkSampleLocationsInfoEXT
+            VkSampleLocationsInfoEXT const *pStruct = static_cast<VkSampleLocationsInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSampleLocationEXT - pSampleLocations / sampleLocationsCount
+            free(const_cast<VkSampleLocationEXT *>(pStruct->pSampleLocations));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
+        {   // VkRenderPassSampleLocationsBeginInfoEXT
+            VkRenderPassSampleLocationsBeginInfoEXT const *pStruct = static_cast<VkRenderPassSampleLocationsBeginInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkAttachmentSampleLocationsEXT - pAttachmentInitialSampleLocations / attachmentInitialSampleLocationsCount
+            free(const_cast<VkAttachmentSampleLocationsEXT *>(pStruct->pAttachmentInitialSampleLocations));
+
+            // VkSubpassSampleLocationsEXT - pPostSubpassSampleLocations / postSubpassSampleLocationsCount
+            free(const_cast<VkSubpassSampleLocationsEXT *>(pStruct->pPostSubpassSampleLocations));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
+        {   // VkPipelineSampleLocationsStateCreateInfoEXT
+            VkPipelineSampleLocationsStateCreateInfoEXT const *pStruct = static_cast<VkPipelineSampleLocationsStateCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceSampleLocationsPropertiesEXT
+            VkPhysicalDeviceSampleLocationsPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT:
+        {   // VkMultisamplePropertiesEXT
+            VkMultisamplePropertiesEXT const *pStruct = static_cast<VkMultisamplePropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
+        {   // VkSamplerReductionModeCreateInfo
+            VkSamplerReductionModeCreateInfo const *pStruct = static_cast<VkSamplerReductionModeCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
+        {   // VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT
+            VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT:
+        {   // VkPhysicalDeviceMultiDrawFeaturesEXT
+            VkPhysicalDeviceMultiDrawFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceMultiDrawFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
+            VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
+        {   // VkPipelineColorBlendAdvancedStateCreateInfoEXT
+            VkPipelineColorBlendAdvancedStateCreateInfoEXT const *pStruct = static_cast<VkPipelineColorBlendAdvancedStateCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT:
+        {   // VkPhysicalDeviceInlineUniformBlockFeaturesEXT
+            VkPhysicalDeviceInlineUniformBlockFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceInlineUniformBlockFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceInlineUniformBlockPropertiesEXT
+            VkPhysicalDeviceInlineUniformBlockPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceInlineUniformBlockPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT:
+        {   // VkWriteDescriptorSetInlineUniformBlockEXT
+            VkWriteDescriptorSetInlineUniformBlockEXT const *pStruct = static_cast<VkWriteDescriptorSetInlineUniformBlockEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pData / dataSize
+            free(const_cast<void *>(pStruct->pData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT:
+        {   // VkDescriptorPoolInlineUniformBlockCreateInfoEXT
+            VkDescriptorPoolInlineUniformBlockCreateInfoEXT const *pStruct = static_cast<VkDescriptorPoolInlineUniformBlockCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:
+        {   // VkPipelineCoverageModulationStateCreateInfoNV
+            VkPipelineCoverageModulationStateCreateInfoNV const *pStruct = static_cast<VkPipelineCoverageModulationStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // float - pCoverageModulationTable / coverageModulationTableCount
+            free(const_cast<float *>(pStruct->pCoverageModulationTable));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
+        {   // VkImageFormatListCreateInfo
+            VkImageFormatListCreateInfo const *pStruct = static_cast<VkImageFormatListCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkFormat - pViewFormats / viewFormatCount
+            free(const_cast<VkFormat *>(pStruct->pViewFormats));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT:
+        {   // VkValidationCacheCreateInfoEXT
+            VkValidationCacheCreateInfoEXT const *pStruct = static_cast<VkValidationCacheCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pInitialData / initialDataSize
+            free(const_cast<void *>(pStruct->pInitialData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:
+        {   // VkShaderModuleValidationCacheCreateInfoEXT
+            VkShaderModuleValidationCacheCreateInfoEXT const *pStruct = static_cast<VkShaderModuleValidationCacheCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
+        {   // VkPhysicalDeviceMaintenance3Properties
+            VkPhysicalDeviceMaintenance3Properties const *pStruct = static_cast<VkPhysicalDeviceMaintenance3Properties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR:
+        {   // VkPhysicalDeviceMaintenance4FeaturesKHR
+            VkPhysicalDeviceMaintenance4FeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceMaintenance4FeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR:
+        {   // VkPhysicalDeviceMaintenance4PropertiesKHR
+            VkPhysicalDeviceMaintenance4PropertiesKHR const *pStruct = static_cast<VkPhysicalDeviceMaintenance4PropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT:
+        {   // VkDescriptorSetLayoutSupport
+            VkDescriptorSetLayoutSupport const *pStruct = static_cast<VkDescriptorSetLayoutSupport const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
+        {   // VkPhysicalDeviceShaderDrawParametersFeatures
+            VkPhysicalDeviceShaderDrawParametersFeatures const *pStruct = static_cast<VkPhysicalDeviceShaderDrawParametersFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:
+        {   // VkPhysicalDeviceShaderFloat16Int8Features
+            VkPhysicalDeviceShaderFloat16Int8Features const *pStruct = static_cast<VkPhysicalDeviceShaderFloat16Int8Features const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES:
+        {   // VkPhysicalDeviceFloatControlsProperties
+            VkPhysicalDeviceFloatControlsProperties const *pStruct = static_cast<VkPhysicalDeviceFloatControlsProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
+        {   // VkPhysicalDeviceHostQueryResetFeatures
+            VkPhysicalDeviceHostQueryResetFeatures const *pStruct = static_cast<VkPhysicalDeviceHostQueryResetFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
+        {   // VkNativeBufferANDROID
+            VkNativeBufferANDROID const *pStruct = static_cast<VkNativeBufferANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID:
+        {   // VkSwapchainImageCreateInfoANDROID
+            VkSwapchainImageCreateInfoANDROID const *pStruct = static_cast<VkSwapchainImageCreateInfoANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID:
+        {   // VkPhysicalDevicePresentationPropertiesANDROID
+            VkPhysicalDevicePresentationPropertiesANDROID const *pStruct = static_cast<VkPhysicalDevicePresentationPropertiesANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+    case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
+        {   // VkDeviceQueueGlobalPriorityCreateInfoEXT
+            VkDeviceQueueGlobalPriorityCreateInfoEXT const *pStruct = static_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT:
+        {   // VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT
+            VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT:
+        {   // VkQueueFamilyGlobalPriorityPropertiesEXT
+            VkQueueFamilyGlobalPriorityPropertiesEXT const *pStruct = static_cast<VkQueueFamilyGlobalPriorityPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT:
+        {   // VkDebugUtilsObjectNameInfoEXT
+            VkDebugUtilsObjectNameInfoEXT const *pStruct = static_cast<VkDebugUtilsObjectNameInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // char - pObjectName / null-terminated
+            free(const_cast<char *>(pStruct->pObjectName));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT:
+        {   // VkDebugUtilsObjectTagInfoEXT
+            VkDebugUtilsObjectTagInfoEXT const *pStruct = static_cast<VkDebugUtilsObjectTagInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pTag / tagSize
+            free(const_cast<void *>(pStruct->pTag));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT:
+        {   // VkDebugUtilsLabelEXT
+            VkDebugUtilsLabelEXT const *pStruct = static_cast<VkDebugUtilsLabelEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // char - pLabelName / null-terminated
+            free(const_cast<char *>(pStruct->pLabelName));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
+        {   // VkDebugUtilsMessengerCreateInfoEXT
+            VkDebugUtilsMessengerCreateInfoEXT const *pStruct = static_cast<VkDebugUtilsMessengerCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pUserData
+            free(const_cast<void *>(pStruct->pUserData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT:
+        {   // VkDebugUtilsMessengerCallbackDataEXT
+            VkDebugUtilsMessengerCallbackDataEXT const *pStruct = static_cast<VkDebugUtilsMessengerCallbackDataEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // char - pMessageIdName / null-terminated
+            free(const_cast<char *>(pStruct->pMessageIdName));
+
+            // char - pMessage / null-terminated
+            free(const_cast<char *>(pStruct->pMessage));
+
+            // VkDebugUtilsLabelEXT - pQueueLabels / queueLabelCount
+            for (uint32_t i = 0; i < pStruct->queueLabelCount; ++i)
+                vk_struct_cleanup(&pStruct->pQueueLabels[i]);
+            free(const_cast<VkDebugUtilsLabelEXT *>(pStruct->pQueueLabels));
+
+            // VkDebugUtilsLabelEXT - pCmdBufLabels / cmdBufLabelCount
+            for (uint32_t i = 0; i < pStruct->cmdBufLabelCount; ++i)
+                vk_struct_cleanup(&pStruct->pCmdBufLabels[i]);
+            free(const_cast<VkDebugUtilsLabelEXT *>(pStruct->pCmdBufLabels));
+
+            // VkDebugUtilsObjectNameInfoEXT - pObjects / objectCount
+            for (uint32_t i = 0; i < pStruct->objectCount; ++i)
+                vk_struct_cleanup(&pStruct->pObjects[i]);
+            free(const_cast<VkDebugUtilsObjectNameInfoEXT *>(pStruct->pObjects));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT:
+        {   // VkPhysicalDeviceDeviceMemoryReportFeaturesEXT
+            VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT:
+        {   // VkDeviceDeviceMemoryReportCreateInfoEXT
+            VkDeviceDeviceMemoryReportCreateInfoEXT const *pStruct = static_cast<VkDeviceDeviceMemoryReportCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pUserData
+            free(const_cast<void *>(pStruct->pUserData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT:
+        {   // VkDeviceMemoryReportCallbackDataEXT
+            VkDeviceMemoryReportCallbackDataEXT const *pStruct = static_cast<VkDeviceMemoryReportCallbackDataEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
+        {   // VkImportMemoryHostPointerInfoEXT
+            VkImportMemoryHostPointerInfoEXT const *pStruct = static_cast<VkImportMemoryHostPointerInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pHostPointer
+            free(const_cast<void *>(pStruct->pHostPointer));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT:
+        {   // VkMemoryHostPointerPropertiesEXT
+            VkMemoryHostPointerPropertiesEXT const *pStruct = static_cast<VkMemoryHostPointerPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceExternalMemoryHostPropertiesEXT
+            VkPhysicalDeviceExternalMemoryHostPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceConservativeRasterizationPropertiesEXT
+            VkPhysicalDeviceConservativeRasterizationPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT:
+        {   // VkCalibratedTimestampInfoEXT
+            VkCalibratedTimestampInfoEXT const *pStruct = static_cast<VkCalibratedTimestampInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
+        {   // VkPhysicalDeviceShaderCorePropertiesAMD
+            VkPhysicalDeviceShaderCorePropertiesAMD const *pStruct = static_cast<VkPhysicalDeviceShaderCorePropertiesAMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD:
+        {   // VkPhysicalDeviceShaderCoreProperties2AMD
+            VkPhysicalDeviceShaderCoreProperties2AMD const *pStruct = static_cast<VkPhysicalDeviceShaderCoreProperties2AMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
+        {   // VkPipelineRasterizationConservativeStateCreateInfoEXT
+            VkPipelineRasterizationConservativeStateCreateInfoEXT const *pStruct = static_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:
+        {   // VkPhysicalDeviceDescriptorIndexingFeatures
+            VkPhysicalDeviceDescriptorIndexingFeatures const *pStruct = static_cast<VkPhysicalDeviceDescriptorIndexingFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES:
+        {   // VkPhysicalDeviceDescriptorIndexingProperties
+            VkPhysicalDeviceDescriptorIndexingProperties const *pStruct = static_cast<VkPhysicalDeviceDescriptorIndexingProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO:
+        {   // VkDescriptorSetLayoutBindingFlagsCreateInfo
+            VkDescriptorSetLayoutBindingFlagsCreateInfo const *pStruct = static_cast<VkDescriptorSetLayoutBindingFlagsCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDescriptorBindingFlags - pBindingFlags / bindingCount
+            free(const_cast<VkDescriptorBindingFlags *>(pStruct->pBindingFlags));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:
+        {   // VkDescriptorSetVariableDescriptorCountAllocateInfo
+            VkDescriptorSetVariableDescriptorCountAllocateInfo const *pStruct = static_cast<VkDescriptorSetVariableDescriptorCountAllocateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pDescriptorCounts / descriptorSetCount
+            free(const_cast<uint32_t *>(pStruct->pDescriptorCounts));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT:
+        {   // VkDescriptorSetVariableDescriptorCountLayoutSupport
+            VkDescriptorSetVariableDescriptorCountLayoutSupport const *pStruct = static_cast<VkDescriptorSetVariableDescriptorCountLayoutSupport const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2:
+        {   // VkAttachmentDescription2
+            VkAttachmentDescription2 const *pStruct = static_cast<VkAttachmentDescription2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2:
+        {   // VkAttachmentReference2
+            VkAttachmentReference2 const *pStruct = static_cast<VkAttachmentReference2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2:
+        {   // VkSubpassDescription2
+            VkSubpassDescription2 const *pStruct = static_cast<VkSubpassDescription2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkAttachmentReference2 - pInputAttachments / inputAttachmentCount
+            for (uint32_t i = 0; i < pStruct->inputAttachmentCount; ++i)
+                vk_struct_cleanup(&pStruct->pInputAttachments[i]);
+            free(const_cast<VkAttachmentReference2 *>(pStruct->pInputAttachments));
+
+            // VkAttachmentReference2 - pColorAttachments / colorAttachmentCount
+            for (uint32_t i = 0; i < pStruct->colorAttachmentCount; ++i)
+                vk_struct_cleanup(&pStruct->pColorAttachments[i]);
+            free(const_cast<VkAttachmentReference2 *>(pStruct->pColorAttachments));
+
+            // VkAttachmentReference2 - pResolveAttachments / colorAttachmentCount
+            for (uint32_t i = 0; i < pStruct->colorAttachmentCount; ++i)
+                vk_struct_cleanup(&pStruct->pResolveAttachments[i]);
+            free(const_cast<VkAttachmentReference2 *>(pStruct->pResolveAttachments));
+
+            // VkAttachmentReference2 - pDepthStencilAttachment
+            vk_struct_cleanup(pStruct->pDepthStencilAttachment);
+            free(const_cast<VkAttachmentReference2 *>(pStruct->pDepthStencilAttachment));
+
+            // uint32_t - pPreserveAttachments / preserveAttachmentCount
+            free(const_cast<uint32_t *>(pStruct->pPreserveAttachments));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2:
+        {   // VkSubpassDependency2
+            VkSubpassDependency2 const *pStruct = static_cast<VkSubpassDependency2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:
+        {   // VkRenderPassCreateInfo2
+            VkRenderPassCreateInfo2 const *pStruct = static_cast<VkRenderPassCreateInfo2 const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkAttachmentDescription2 - pAttachments / attachmentCount
+            for (uint32_t i = 0; i < pStruct->attachmentCount; ++i)
+                vk_struct_cleanup(&pStruct->pAttachments[i]);
+            free(const_cast<VkAttachmentDescription2 *>(pStruct->pAttachments));
+
+            // VkSubpassDescription2 - pSubpasses / subpassCount
+            for (uint32_t i = 0; i < pStruct->subpassCount; ++i)
+                vk_struct_cleanup(&pStruct->pSubpasses[i]);
+            free(const_cast<VkSubpassDescription2 *>(pStruct->pSubpasses));
+
+            // VkSubpassDependency2 - pDependencies / dependencyCount
+            for (uint32_t i = 0; i < pStruct->dependencyCount; ++i)
+                vk_struct_cleanup(&pStruct->pDependencies[i]);
+            free(const_cast<VkSubpassDependency2 *>(pStruct->pDependencies));
+
+            // uint32_t - pCorrelatedViewMasks / correlatedViewMaskCount
+            free(const_cast<uint32_t *>(pStruct->pCorrelatedViewMasks));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO:
+        {   // VkSubpassBeginInfo
+            VkSubpassBeginInfo const *pStruct = static_cast<VkSubpassBeginInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SUBPASS_END_INFO:
+        {   // VkSubpassEndInfo
+            VkSubpassEndInfo const *pStruct = static_cast<VkSubpassEndInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:
+        {   // VkPhysicalDeviceTimelineSemaphoreFeatures
+            VkPhysicalDeviceTimelineSemaphoreFeatures const *pStruct = static_cast<VkPhysicalDeviceTimelineSemaphoreFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:
+        {   // VkPhysicalDeviceTimelineSemaphoreProperties
+            VkPhysicalDeviceTimelineSemaphoreProperties const *pStruct = static_cast<VkPhysicalDeviceTimelineSemaphoreProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:
+        {   // VkSemaphoreTypeCreateInfo
+            VkSemaphoreTypeCreateInfo const *pStruct = static_cast<VkSemaphoreTypeCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
+        {   // VkTimelineSemaphoreSubmitInfo
+            VkTimelineSemaphoreSubmitInfo const *pStruct = static_cast<VkTimelineSemaphoreSubmitInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint64_t - pWaitSemaphoreValues / waitSemaphoreValueCount
+            free(const_cast<uint64_t *>(pStruct->pWaitSemaphoreValues));
+
+            // uint64_t - pSignalSemaphoreValues / signalSemaphoreValueCount
+            free(const_cast<uint64_t *>(pStruct->pSignalSemaphoreValues));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO:
+        {   // VkSemaphoreWaitInfo
+            VkSemaphoreWaitInfo const *pStruct = static_cast<VkSemaphoreWaitInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSemaphore - pSemaphores / semaphoreCount
+            free(const_cast<VkSemaphore *>(pStruct->pSemaphores));
+
+            // uint64_t - pValues / semaphoreCount
+            free(const_cast<uint64_t *>(pStruct->pValues));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO:
+        {   // VkSemaphoreSignalInfo
+            VkSemaphoreSignalInfo const *pStruct = static_cast<VkSemaphoreSignalInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
+        {   // VkPipelineVertexInputDivisorStateCreateInfoEXT
+            VkPipelineVertexInputDivisorStateCreateInfoEXT const *pStruct = static_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVertexInputBindingDivisorDescriptionEXT - pVertexBindingDivisors / vertexBindingDivisorCount
+            free(const_cast<VkVertexInputBindingDivisorDescriptionEXT *>(pStruct->pVertexBindingDivisors));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
+            VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
+        {   // VkPhysicalDevicePCIBusInfoPropertiesEXT
+            VkPhysicalDevicePCIBusInfoPropertiesEXT const *pStruct = static_cast<VkPhysicalDevicePCIBusInfoPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
+        {   // VkImportAndroidHardwareBufferInfoANDROID
+            VkImportAndroidHardwareBufferInfoANDROID const *pStruct = static_cast<VkImportAndroidHardwareBufferInfoANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
+        {   // VkAndroidHardwareBufferUsageANDROID
+            VkAndroidHardwareBufferUsageANDROID const *pStruct = static_cast<VkAndroidHardwareBufferUsageANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID:
+        {   // VkAndroidHardwareBufferPropertiesANDROID
+            VkAndroidHardwareBufferPropertiesANDROID const *pStruct = static_cast<VkAndroidHardwareBufferPropertiesANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
+        {   // VkMemoryGetAndroidHardwareBufferInfoANDROID
+            VkMemoryGetAndroidHardwareBufferInfoANDROID const *pStruct = static_cast<VkMemoryGetAndroidHardwareBufferInfoANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
+        {   // VkAndroidHardwareBufferFormatPropertiesANDROID
+            VkAndroidHardwareBufferFormatPropertiesANDROID const *pStruct = static_cast<VkAndroidHardwareBufferFormatPropertiesANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+    case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
+        {   // VkCommandBufferInheritanceConditionalRenderingInfoEXT
+            VkCommandBufferInheritanceConditionalRenderingInfoEXT const *pStruct = static_cast<VkCommandBufferInheritanceConditionalRenderingInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
+        {   // VkExternalFormatANDROID
+            VkExternalFormatANDROID const *pStruct = static_cast<VkExternalFormatANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:
+        {   // VkPhysicalDevice8BitStorageFeatures
+            VkPhysicalDevice8BitStorageFeatures const *pStruct = static_cast<VkPhysicalDevice8BitStorageFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
+        {   // VkPhysicalDeviceConditionalRenderingFeaturesEXT
+            VkPhysicalDeviceConditionalRenderingFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
+        {   // VkPhysicalDeviceVulkanMemoryModelFeatures
+            VkPhysicalDeviceVulkanMemoryModelFeatures const *pStruct = static_cast<VkPhysicalDeviceVulkanMemoryModelFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:
+        {   // VkPhysicalDeviceShaderAtomicInt64Features
+            VkPhysicalDeviceShaderAtomicInt64Features const *pStruct = static_cast<VkPhysicalDeviceShaderAtomicInt64Features const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT:
+        {   // VkPhysicalDeviceShaderAtomicFloatFeaturesEXT
+            VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT:
+        {   // VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT
+            VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT:
+        {   // VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT
+            VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
+        {   // VkQueueFamilyCheckpointPropertiesNV
+            VkQueueFamilyCheckpointPropertiesNV const *pStruct = static_cast<VkQueueFamilyCheckpointPropertiesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV:
+        {   // VkCheckpointDataNV
+            VkCheckpointDataNV const *pStruct = static_cast<VkCheckpointDataNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pCheckpointMarker
+            free(const_cast<void *>(pStruct->pCheckpointMarker));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:
+        {   // VkPhysicalDeviceDepthStencilResolveProperties
+            VkPhysicalDeviceDepthStencilResolveProperties const *pStruct = static_cast<VkPhysicalDeviceDepthStencilResolveProperties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE:
+        {   // VkSubpassDescriptionDepthStencilResolve
+            VkSubpassDescriptionDepthStencilResolve const *pStruct = static_cast<VkSubpassDescriptionDepthStencilResolve const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkAttachmentReference2 - pDepthStencilResolveAttachment
+            vk_struct_cleanup(pStruct->pDepthStencilResolveAttachment);
+            free(const_cast<VkAttachmentReference2 *>(pStruct->pDepthStencilResolveAttachment));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT:
+        {   // VkImageViewASTCDecodeModeEXT
+            VkImageViewASTCDecodeModeEXT const *pStruct = static_cast<VkImageViewASTCDecodeModeEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT:
+        {   // VkPhysicalDeviceASTCDecodeFeaturesEXT
+            VkPhysicalDeviceASTCDecodeFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceASTCDecodeFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:
+        {   // VkPhysicalDeviceTransformFeedbackFeaturesEXT
+            VkPhysicalDeviceTransformFeedbackFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceTransformFeedbackFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceTransformFeedbackPropertiesEXT
+            VkPhysicalDeviceTransformFeedbackPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceTransformFeedbackPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:
+        {   // VkPipelineRasterizationStateStreamCreateInfoEXT
+            VkPipelineRasterizationStateStreamCreateInfoEXT const *pStruct = static_cast<VkPipelineRasterizationStateStreamCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV:
+        {   // VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV
+            VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV:
+        {   // VkPipelineRepresentativeFragmentTestStateCreateInfoNV
+            VkPipelineRepresentativeFragmentTestStateCreateInfoNV const *pStruct = static_cast<VkPipelineRepresentativeFragmentTestStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:
+        {   // VkPhysicalDeviceExclusiveScissorFeaturesNV
+            VkPhysicalDeviceExclusiveScissorFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceExclusiveScissorFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV:
+        {   // VkPipelineViewportExclusiveScissorStateCreateInfoNV
+            VkPipelineViewportExclusiveScissorStateCreateInfoNV const *pStruct = static_cast<VkPipelineViewportExclusiveScissorStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkRect2D - pExclusiveScissors / exclusiveScissorCount
+            free(const_cast<VkRect2D *>(pStruct->pExclusiveScissors));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV:
+        {   // VkPhysicalDeviceCornerSampledImageFeaturesNV
+            VkPhysicalDeviceCornerSampledImageFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceCornerSampledImageFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV:
+        {   // VkPhysicalDeviceComputeShaderDerivativesFeaturesNV
+            VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV:
+        {   // VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
+            VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV:
+        {   // VkPhysicalDeviceShaderImageFootprintFeaturesNV
+            VkPhysicalDeviceShaderImageFootprintFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceShaderImageFootprintFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV:
+        {   // VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
+            VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV:
+        {   // VkPipelineViewportShadingRateImageStateCreateInfoNV
+            VkPipelineViewportShadingRateImageStateCreateInfoNV const *pStruct = static_cast<VkPipelineViewportShadingRateImageStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkShadingRatePaletteNV - pShadingRatePalettes / viewportCount
+            free(const_cast<VkShadingRatePaletteNV *>(pStruct->pShadingRatePalettes));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV:
+        {   // VkPhysicalDeviceShadingRateImageFeaturesNV
+            VkPhysicalDeviceShadingRateImageFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceShadingRateImageFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV:
+        {   // VkPhysicalDeviceShadingRateImagePropertiesNV
+            VkPhysicalDeviceShadingRateImagePropertiesNV const *pStruct = static_cast<VkPhysicalDeviceShadingRateImagePropertiesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI:
+        {   // VkPhysicalDeviceInvocationMaskFeaturesHUAWEI
+            VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const *pStruct = static_cast<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV:
+        {   // VkPipelineViewportCoarseSampleOrderStateCreateInfoNV
+            VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const *pStruct = static_cast<VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkCoarseSampleOrderCustomNV - pCustomSampleOrders / customSampleOrderCount
+            free(const_cast<VkCoarseSampleOrderCustomNV *>(pStruct->pCustomSampleOrders));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV:
+        {   // VkPhysicalDeviceMeshShaderFeaturesNV
+            VkPhysicalDeviceMeshShaderFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceMeshShaderFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV:
+        {   // VkPhysicalDeviceMeshShaderPropertiesNV
+            VkPhysicalDeviceMeshShaderPropertiesNV const *pStruct = static_cast<VkPhysicalDeviceMeshShaderPropertiesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV:
+        {   // VkRayTracingShaderGroupCreateInfoNV
+            VkRayTracingShaderGroupCreateInfoNV const *pStruct = static_cast<VkRayTracingShaderGroupCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR:
+        {   // VkRayTracingShaderGroupCreateInfoKHR
+            VkRayTracingShaderGroupCreateInfoKHR const *pStruct = static_cast<VkRayTracingShaderGroupCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pShaderGroupCaptureReplayHandle
+            free(const_cast<void *>(pStruct->pShaderGroupCaptureReplayHandle));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV:
+        {   // VkRayTracingPipelineCreateInfoNV
+            VkRayTracingPipelineCreateInfoNV const *pStruct = static_cast<VkRayTracingPipelineCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPipelineShaderStageCreateInfo - pStages / stageCount
+            for (uint32_t i = 0; i < pStruct->stageCount; ++i)
+                vk_struct_cleanup(&pStruct->pStages[i]);
+            free(const_cast<VkPipelineShaderStageCreateInfo *>(pStruct->pStages));
+
+            // VkRayTracingShaderGroupCreateInfoNV - pGroups / groupCount
+            for (uint32_t i = 0; i < pStruct->groupCount; ++i)
+                vk_struct_cleanup(&pStruct->pGroups[i]);
+            free(const_cast<VkRayTracingShaderGroupCreateInfoNV *>(pStruct->pGroups));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR:
+        {   // VkRayTracingPipelineCreateInfoKHR
+            VkRayTracingPipelineCreateInfoKHR const *pStruct = static_cast<VkRayTracingPipelineCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPipelineShaderStageCreateInfo - pStages / stageCount
+            for (uint32_t i = 0; i < pStruct->stageCount; ++i)
+                vk_struct_cleanup(&pStruct->pStages[i]);
+            free(const_cast<VkPipelineShaderStageCreateInfo *>(pStruct->pStages));
+
+            // VkRayTracingShaderGroupCreateInfoKHR - pGroups / groupCount
+            for (uint32_t i = 0; i < pStruct->groupCount; ++i)
+                vk_struct_cleanup(&pStruct->pGroups[i]);
+            free(const_cast<VkRayTracingShaderGroupCreateInfoKHR *>(pStruct->pGroups));
+
+            // VkPipelineLibraryCreateInfoKHR - pLibraryInfo
+            vk_struct_cleanup(pStruct->pLibraryInfo);
+            free(const_cast<VkPipelineLibraryCreateInfoKHR *>(pStruct->pLibraryInfo));
+
+            // VkRayTracingPipelineInterfaceCreateInfoKHR - pLibraryInterface
+            vk_struct_cleanup(pStruct->pLibraryInterface);
+            free(const_cast<VkRayTracingPipelineInterfaceCreateInfoKHR *>(pStruct->pLibraryInterface));
+
+            // VkPipelineDynamicStateCreateInfo - pDynamicState
+            vk_struct_cleanup(pStruct->pDynamicState);
+            free(const_cast<VkPipelineDynamicStateCreateInfo *>(pStruct->pDynamicState));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV:
+        {   // VkGeometryTrianglesNV
+            VkGeometryTrianglesNV const *pStruct = static_cast<VkGeometryTrianglesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV:
+        {   // VkGeometryAABBNV
+            VkGeometryAABBNV const *pStruct = static_cast<VkGeometryAABBNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_GEOMETRY_NV:
+        {   // VkGeometryNV
+            VkGeometryNV const *pStruct = static_cast<VkGeometryNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV:
+        {   // VkAccelerationStructureInfoNV
+            VkAccelerationStructureInfoNV const *pStruct = static_cast<VkAccelerationStructureInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkGeometryNV - pGeometries / geometryCount
+            for (uint32_t i = 0; i < pStruct->geometryCount; ++i)
+                vk_struct_cleanup(&pStruct->pGeometries[i]);
+            free(const_cast<VkGeometryNV *>(pStruct->pGeometries));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV:
+        {   // VkAccelerationStructureCreateInfoNV
+            VkAccelerationStructureCreateInfoNV const *pStruct = static_cast<VkAccelerationStructureCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV:
+        {   // VkBindAccelerationStructureMemoryInfoNV
+            VkBindAccelerationStructureMemoryInfoNV const *pStruct = static_cast<VkBindAccelerationStructureMemoryInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pDeviceIndices / deviceIndexCount
+            free(const_cast<uint32_t *>(pStruct->pDeviceIndices));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
+        {   // VkWriteDescriptorSetAccelerationStructureKHR
+            VkWriteDescriptorSetAccelerationStructureKHR const *pStruct = static_cast<VkWriteDescriptorSetAccelerationStructureKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkAccelerationStructureKHR - pAccelerationStructures / accelerationStructureCount
+            free(const_cast<VkAccelerationStructureKHR *>(pStruct->pAccelerationStructures));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV:
+        {   // VkWriteDescriptorSetAccelerationStructureNV
+            VkWriteDescriptorSetAccelerationStructureNV const *pStruct = static_cast<VkWriteDescriptorSetAccelerationStructureNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkAccelerationStructureNV - pAccelerationStructures / accelerationStructureCount
+            free(const_cast<VkAccelerationStructureNV *>(pStruct->pAccelerationStructures));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV:
+        {   // VkAccelerationStructureMemoryRequirementsInfoNV
+            VkAccelerationStructureMemoryRequirementsInfoNV const *pStruct = static_cast<VkAccelerationStructureMemoryRequirementsInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR:
+        {   // VkPhysicalDeviceAccelerationStructureFeaturesKHR
+            VkPhysicalDeviceAccelerationStructureFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceAccelerationStructureFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
+        {   // VkPhysicalDeviceRayTracingPipelineFeaturesKHR
+            VkPhysicalDeviceRayTracingPipelineFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceRayTracingPipelineFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR:
+        {   // VkPhysicalDeviceRayQueryFeaturesKHR
+            VkPhysicalDeviceRayQueryFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceRayQueryFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
+        {   // VkPhysicalDeviceAccelerationStructurePropertiesKHR
+            VkPhysicalDeviceAccelerationStructurePropertiesKHR const *pStruct = static_cast<VkPhysicalDeviceAccelerationStructurePropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR:
+        {   // VkPhysicalDeviceRayTracingPipelinePropertiesKHR
+            VkPhysicalDeviceRayTracingPipelinePropertiesKHR const *pStruct = static_cast<VkPhysicalDeviceRayTracingPipelinePropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV:
+        {   // VkPhysicalDeviceRayTracingPropertiesNV
+            VkPhysicalDeviceRayTracingPropertiesNV const *pStruct = static_cast<VkPhysicalDeviceRayTracingPropertiesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:
+        {   // VkDrmFormatModifierPropertiesListEXT
+            VkDrmFormatModifierPropertiesListEXT const *pStruct = static_cast<VkDrmFormatModifierPropertiesListEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDrmFormatModifierPropertiesEXT - pDrmFormatModifierProperties / drmFormatModifierCount
+            free(const_cast<VkDrmFormatModifierPropertiesEXT *>(pStruct->pDrmFormatModifierProperties));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:
+        {   // VkPhysicalDeviceImageDrmFormatModifierInfoEXT
+            VkPhysicalDeviceImageDrmFormatModifierInfoEXT const *pStruct = static_cast<VkPhysicalDeviceImageDrmFormatModifierInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pQueueFamilyIndices / queueFamilyIndexCount
+            free(const_cast<uint32_t *>(pStruct->pQueueFamilyIndices));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT:
+        {   // VkImageDrmFormatModifierListCreateInfoEXT
+            VkImageDrmFormatModifierListCreateInfoEXT const *pStruct = static_cast<VkImageDrmFormatModifierListCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint64_t - pDrmFormatModifiers / drmFormatModifierCount
+            free(const_cast<uint64_t *>(pStruct->pDrmFormatModifiers));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT:
+        {   // VkImageDrmFormatModifierExplicitCreateInfoEXT
+            VkImageDrmFormatModifierExplicitCreateInfoEXT const *pStruct = static_cast<VkImageDrmFormatModifierExplicitCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSubresourceLayout - pPlaneLayouts / drmFormatModifierPlaneCount
+            free(const_cast<VkSubresourceLayout *>(pStruct->pPlaneLayouts));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT:
+        {   // VkImageDrmFormatModifierPropertiesEXT
+            VkImageDrmFormatModifierPropertiesEXT const *pStruct = static_cast<VkImageDrmFormatModifierPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
+        {   // VkImageStencilUsageCreateInfo
+            VkImageStencilUsageCreateInfo const *pStruct = static_cast<VkImageStencilUsageCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD:
+        {   // VkDeviceMemoryOverallocationCreateInfoAMD
+            VkDeviceMemoryOverallocationCreateInfoAMD const *pStruct = static_cast<VkDeviceMemoryOverallocationCreateInfoAMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
+        {   // VkPhysicalDeviceFragmentDensityMapFeaturesEXT
+            VkPhysicalDeviceFragmentDensityMapFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT:
+        {   // VkPhysicalDeviceFragmentDensityMap2FeaturesEXT
+            VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceFragmentDensityMapPropertiesEXT
+            VkPhysicalDeviceFragmentDensityMapPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceFragmentDensityMap2PropertiesEXT
+            VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
+        {   // VkRenderPassFragmentDensityMapCreateInfoEXT
+            VkRenderPassFragmentDensityMapCreateInfoEXT const *pStruct = static_cast<VkRenderPassFragmentDensityMapCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:
+        {   // VkPhysicalDeviceScalarBlockLayoutFeatures
+            VkPhysicalDeviceScalarBlockLayoutFeatures const *pStruct = static_cast<VkPhysicalDeviceScalarBlockLayoutFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR:
+        {   // VkSurfaceProtectedCapabilitiesKHR
+            VkSurfaceProtectedCapabilitiesKHR const *pStruct = static_cast<VkSurfaceProtectedCapabilitiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:
+        {   // VkPhysicalDeviceUniformBufferStandardLayoutFeatures
+            VkPhysicalDeviceUniformBufferStandardLayoutFeatures const *pStruct = static_cast<VkPhysicalDeviceUniformBufferStandardLayoutFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:
+        {   // VkPhysicalDeviceDepthClipEnableFeaturesEXT
+            VkPhysicalDeviceDepthClipEnableFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceDepthClipEnableFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:
+        {   // VkPipelineRasterizationDepthClipStateCreateInfoEXT
+            VkPipelineRasterizationDepthClipStateCreateInfoEXT const *pStruct = static_cast<VkPipelineRasterizationDepthClipStateCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceMemoryBudgetPropertiesEXT
+            VkPhysicalDeviceMemoryBudgetPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceMemoryBudgetPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
+        {   // VkPhysicalDeviceMemoryPriorityFeaturesEXT
+            VkPhysicalDeviceMemoryPriorityFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceMemoryPriorityFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT:
+        {   // VkMemoryPriorityAllocateInfoEXT
+            VkMemoryPriorityAllocateInfoEXT const *pStruct = static_cast<VkMemoryPriorityAllocateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT:
+        {   // VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT
+            VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const *pStruct = static_cast<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:
+        {   // VkPhysicalDeviceBufferDeviceAddressFeatures
+            VkPhysicalDeviceBufferDeviceAddressFeatures const *pStruct = static_cast<VkPhysicalDeviceBufferDeviceAddressFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:
+        {   // VkPhysicalDeviceBufferDeviceAddressFeaturesEXT
+            VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO:
+        {   // VkBufferDeviceAddressInfo
+            VkBufferDeviceAddressInfo const *pStruct = static_cast<VkBufferDeviceAddressInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO:
+        {   // VkBufferOpaqueCaptureAddressCreateInfo
+            VkBufferOpaqueCaptureAddressCreateInfo const *pStruct = static_cast<VkBufferOpaqueCaptureAddressCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT:
+        {   // VkBufferDeviceAddressCreateInfoEXT
+            VkBufferDeviceAddressCreateInfoEXT const *pStruct = static_cast<VkBufferDeviceAddressCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT:
+        {   // VkPhysicalDeviceImageViewImageFormatInfoEXT
+            VkPhysicalDeviceImageViewImageFormatInfoEXT const *pStruct = static_cast<VkPhysicalDeviceImageViewImageFormatInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT:
+        {   // VkFilterCubicImageViewImageFormatPropertiesEXT
+            VkFilterCubicImageViewImageFormatPropertiesEXT const *pStruct = static_cast<VkFilterCubicImageViewImageFormatPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:
+        {   // VkPhysicalDeviceImagelessFramebufferFeatures
+            VkPhysicalDeviceImagelessFramebufferFeatures const *pStruct = static_cast<VkPhysicalDeviceImagelessFramebufferFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO:
+        {   // VkFramebufferAttachmentsCreateInfo
+            VkFramebufferAttachmentsCreateInfo const *pStruct = static_cast<VkFramebufferAttachmentsCreateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkFramebufferAttachmentImageInfo - pAttachmentImageInfos / attachmentImageInfoCount
+            for (uint32_t i = 0; i < pStruct->attachmentImageInfoCount; ++i)
+                vk_struct_cleanup(&pStruct->pAttachmentImageInfos[i]);
+            free(const_cast<VkFramebufferAttachmentImageInfo *>(pStruct->pAttachmentImageInfos));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO:
+        {   // VkFramebufferAttachmentImageInfo
+            VkFramebufferAttachmentImageInfo const *pStruct = static_cast<VkFramebufferAttachmentImageInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkFormat - pViewFormats / viewFormatCount
+            free(const_cast<VkFormat *>(pStruct->pViewFormats));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
+        {   // VkRenderPassAttachmentBeginInfo
+            VkRenderPassAttachmentBeginInfo const *pStruct = static_cast<VkRenderPassAttachmentBeginInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkImageView - pAttachments / attachmentCount
+            free(const_cast<VkImageView *>(pStruct->pAttachments));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT:
+        {   // VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+            VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV:
+        {   // VkPhysicalDeviceCooperativeMatrixFeaturesNV
+            VkPhysicalDeviceCooperativeMatrixFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceCooperativeMatrixFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV:
+        {   // VkPhysicalDeviceCooperativeMatrixPropertiesNV
+            VkPhysicalDeviceCooperativeMatrixPropertiesNV const *pStruct = static_cast<VkPhysicalDeviceCooperativeMatrixPropertiesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV:
+        {   // VkCooperativeMatrixPropertiesNV
+            VkCooperativeMatrixPropertiesNV const *pStruct = static_cast<VkCooperativeMatrixPropertiesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:
+        {   // VkPhysicalDeviceYcbcrImageArraysFeaturesEXT
+            VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX:
+        {   // VkImageViewHandleInfoNVX
+            VkImageViewHandleInfoNVX const *pStruct = static_cast<VkImageViewHandleInfoNVX const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX:
+        {   // VkImageViewAddressPropertiesNVX
+            VkImageViewAddressPropertiesNVX const *pStruct = static_cast<VkImageViewAddressPropertiesNVX const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_GGP
+    case VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP:
+        {   // VkPresentFrameTokenGGP
+            VkPresentFrameTokenGGP const *pStruct = static_cast<VkPresentFrameTokenGGP const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_GGP
+
+    case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT:
+        {   // VkPipelineCreationFeedbackCreateInfoEXT
+            VkPipelineCreationFeedbackCreateInfoEXT const *pStruct = static_cast<VkPipelineCreationFeedbackCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPipelineCreationFeedbackEXT - pPipelineCreationFeedback
+            free(const_cast<VkPipelineCreationFeedbackEXT *>(pStruct->pPipelineCreationFeedback));
+
+            // VkPipelineCreationFeedbackEXT - pPipelineStageCreationFeedbacks / pipelineStageCreationFeedbackCount
+            free(const_cast<VkPipelineCreationFeedbackEXT *>(pStruct->pPipelineStageCreationFeedbacks));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT:
+        {   // VkSurfaceFullScreenExclusiveInfoEXT
+            VkSurfaceFullScreenExclusiveInfoEXT const *pStruct = static_cast<VkSurfaceFullScreenExclusiveInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT:
+        {   // VkSurfaceFullScreenExclusiveWin32InfoEXT
+            VkSurfaceFullScreenExclusiveWin32InfoEXT const *pStruct = static_cast<VkSurfaceFullScreenExclusiveWin32InfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT:
+        {   // VkSurfaceCapabilitiesFullScreenExclusiveEXT
+            VkSurfaceCapabilitiesFullScreenExclusiveEXT const *pStruct = static_cast<VkSurfaceCapabilitiesFullScreenExclusiveEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR:
+        {   // VkPhysicalDevicePerformanceQueryFeaturesKHR
+            VkPhysicalDevicePerformanceQueryFeaturesKHR const *pStruct = static_cast<VkPhysicalDevicePerformanceQueryFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR:
+        {   // VkPhysicalDevicePerformanceQueryPropertiesKHR
+            VkPhysicalDevicePerformanceQueryPropertiesKHR const *pStruct = static_cast<VkPhysicalDevicePerformanceQueryPropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR:
+        {   // VkPerformanceCounterKHR
+            VkPerformanceCounterKHR const *pStruct = static_cast<VkPerformanceCounterKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR:
+        {   // VkPerformanceCounterDescriptionKHR
+            VkPerformanceCounterDescriptionKHR const *pStruct = static_cast<VkPerformanceCounterDescriptionKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR:
+        {   // VkQueryPoolPerformanceCreateInfoKHR
+            VkQueryPoolPerformanceCreateInfoKHR const *pStruct = static_cast<VkQueryPoolPerformanceCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint32_t - pCounterIndices / counterIndexCount
+            free(const_cast<uint32_t *>(pStruct->pCounterIndices));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR:
+        {   // VkAcquireProfilingLockInfoKHR
+            VkAcquireProfilingLockInfoKHR const *pStruct = static_cast<VkAcquireProfilingLockInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR:
+        {   // VkPerformanceQuerySubmitInfoKHR
+            VkPerformanceQuerySubmitInfoKHR const *pStruct = static_cast<VkPerformanceQuerySubmitInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT:
+        {   // VkHeadlessSurfaceCreateInfoEXT
+            VkHeadlessSurfaceCreateInfoEXT const *pStruct = static_cast<VkHeadlessSurfaceCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV:
+        {   // VkPhysicalDeviceCoverageReductionModeFeaturesNV
+            VkPhysicalDeviceCoverageReductionModeFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceCoverageReductionModeFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV:
+        {   // VkPipelineCoverageReductionStateCreateInfoNV
+            VkPipelineCoverageReductionStateCreateInfoNV const *pStruct = static_cast<VkPipelineCoverageReductionStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV:
+        {   // VkFramebufferMixedSamplesCombinationNV
+            VkFramebufferMixedSamplesCombinationNV const *pStruct = static_cast<VkFramebufferMixedSamplesCombinationNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:
+        {   // VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
+            VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const *pStruct = static_cast<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL:
+        {   // VkInitializePerformanceApiInfoINTEL
+            VkInitializePerformanceApiInfoINTEL const *pStruct = static_cast<VkInitializePerformanceApiInfoINTEL const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pUserData
+            free(const_cast<void *>(pStruct->pUserData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL:
+        {   // VkQueryPoolPerformanceQueryCreateInfoINTEL
+            VkQueryPoolPerformanceQueryCreateInfoINTEL const *pStruct = static_cast<VkQueryPoolPerformanceQueryCreateInfoINTEL const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL:
+        {   // VkPerformanceMarkerInfoINTEL
+            VkPerformanceMarkerInfoINTEL const *pStruct = static_cast<VkPerformanceMarkerInfoINTEL const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL:
+        {   // VkPerformanceStreamMarkerInfoINTEL
+            VkPerformanceStreamMarkerInfoINTEL const *pStruct = static_cast<VkPerformanceStreamMarkerInfoINTEL const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL:
+        {   // VkPerformanceOverrideInfoINTEL
+            VkPerformanceOverrideInfoINTEL const *pStruct = static_cast<VkPerformanceOverrideInfoINTEL const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL:
+        {   // VkPerformanceConfigurationAcquireInfoINTEL
+            VkPerformanceConfigurationAcquireInfoINTEL const *pStruct = static_cast<VkPerformanceConfigurationAcquireInfoINTEL const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR:
+        {   // VkPhysicalDeviceShaderClockFeaturesKHR
+            VkPhysicalDeviceShaderClockFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceShaderClockFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:
+        {   // VkPhysicalDeviceIndexTypeUint8FeaturesEXT
+            VkPhysicalDeviceIndexTypeUint8FeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceIndexTypeUint8FeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV:
+        {   // VkPhysicalDeviceShaderSMBuiltinsPropertiesNV
+            VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const *pStruct = static_cast<VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV:
+        {   // VkPhysicalDeviceShaderSMBuiltinsFeaturesNV
+            VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT:
+        {   // VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT
+            VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:
+        {   // VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures
+            VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const *pStruct = static_cast<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT:
+        {   // VkAttachmentReferenceStencilLayout
+            VkAttachmentReferenceStencilLayout const *pStruct = static_cast<VkAttachmentReferenceStencilLayout const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT:
+        {   // VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT
+            VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const *pStruct = static_cast<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT:
+        {   // VkAttachmentDescriptionStencilLayout
+            VkAttachmentDescriptionStencilLayout const *pStruct = static_cast<VkAttachmentDescriptionStencilLayout const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:
+        {   // VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+            VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const *pStruct = static_cast<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR:
+        {   // VkPipelineInfoKHR
+            VkPipelineInfoKHR const *pStruct = static_cast<VkPipelineInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR:
+        {   // VkPipelineExecutablePropertiesKHR
+            VkPipelineExecutablePropertiesKHR const *pStruct = static_cast<VkPipelineExecutablePropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR:
+        {   // VkPipelineExecutableInfoKHR
+            VkPipelineExecutableInfoKHR const *pStruct = static_cast<VkPipelineExecutableInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR:
+        {   // VkPipelineExecutableStatisticKHR
+            VkPipelineExecutableStatisticKHR const *pStruct = static_cast<VkPipelineExecutableStatisticKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR:
+        {   // VkPipelineExecutableInternalRepresentationKHR
+            VkPipelineExecutableInternalRepresentationKHR const *pStruct = static_cast<VkPipelineExecutableInternalRepresentationKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pData / dataSize
+            free(const_cast<void *>(pStruct->pData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT:
+        {   // VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+            VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:
+        {   // VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
+            VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
+            VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT:
+        {   // VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
+            VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
+            VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT:
+        {   // VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+            VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const *pStruct = static_cast<VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI:
+        {   // VkSubpassShadingPipelineCreateInfoHUAWEI
+            VkSubpassShadingPipelineCreateInfoHUAWEI const *pStruct = static_cast<VkSubpassShadingPipelineCreateInfoHUAWEI const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI:
+        {   // VkPhysicalDeviceSubpassShadingPropertiesHUAWEI
+            VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const *pStruct = static_cast<VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:
+        {   // VkMemoryOpaqueCaptureAddressAllocateInfo
+            VkMemoryOpaqueCaptureAddressAllocateInfo const *pStruct = static_cast<VkMemoryOpaqueCaptureAddressAllocateInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO:
+        {   // VkDeviceMemoryOpaqueCaptureAddressInfo
+            VkDeviceMemoryOpaqueCaptureAddressInfo const *pStruct = static_cast<VkDeviceMemoryOpaqueCaptureAddressInfo const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
+        {   // VkPhysicalDeviceLineRasterizationFeaturesEXT
+            VkPhysicalDeviceLineRasterizationFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceLineRasterizationFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceLineRasterizationPropertiesEXT
+            VkPhysicalDeviceLineRasterizationPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceLineRasterizationPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:
+        {   // VkPipelineRasterizationLineStateCreateInfoEXT
+            VkPipelineRasterizationLineStateCreateInfoEXT const *pStruct = static_cast<VkPipelineRasterizationLineStateCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT:
+        {   // VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT
+            VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const *pStruct = static_cast<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:
+        {   // VkPhysicalDeviceVulkan11Features
+            VkPhysicalDeviceVulkan11Features const *pStruct = static_cast<VkPhysicalDeviceVulkan11Features const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES:
+        {   // VkPhysicalDeviceVulkan11Properties
+            VkPhysicalDeviceVulkan11Properties const *pStruct = static_cast<VkPhysicalDeviceVulkan11Properties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:
+        {   // VkPhysicalDeviceVulkan12Features
+            VkPhysicalDeviceVulkan12Features const *pStruct = static_cast<VkPhysicalDeviceVulkan12Features const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:
+        {   // VkPhysicalDeviceVulkan12Properties
+            VkPhysicalDeviceVulkan12Properties const *pStruct = static_cast<VkPhysicalDeviceVulkan12Properties const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD:
+        {   // VkPipelineCompilerControlCreateInfoAMD
+            VkPipelineCompilerControlCreateInfoAMD const *pStruct = static_cast<VkPipelineCompilerControlCreateInfoAMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD:
+        {   // VkPhysicalDeviceCoherentMemoryFeaturesAMD
+            VkPhysicalDeviceCoherentMemoryFeaturesAMD const *pStruct = static_cast<VkPhysicalDeviceCoherentMemoryFeaturesAMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceToolPropertiesEXT
+            VkPhysicalDeviceToolPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceToolPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT:
+        {   // VkSamplerCustomBorderColorCreateInfoEXT
+            VkSamplerCustomBorderColorCreateInfoEXT const *pStruct = static_cast<VkSamplerCustomBorderColorCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceCustomBorderColorPropertiesEXT
+            VkPhysicalDeviceCustomBorderColorPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceCustomBorderColorPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT:
+        {   // VkPhysicalDeviceCustomBorderColorFeaturesEXT
+            VkPhysicalDeviceCustomBorderColorFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceCustomBorderColorFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT:
+        {   // VkSamplerBorderColorComponentMappingCreateInfoEXT
+            VkSamplerBorderColorComponentMappingCreateInfoEXT const *pStruct = static_cast<VkSamplerBorderColorComponentMappingCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT:
+        {   // VkPhysicalDeviceBorderColorSwizzleFeaturesEXT
+            VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR:
+        {   // VkAccelerationStructureGeometryTrianglesDataKHR
+            VkAccelerationStructureGeometryTrianglesDataKHR const *pStruct = static_cast<VkAccelerationStructureGeometryTrianglesDataKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR:
+        {   // VkAccelerationStructureGeometryAabbsDataKHR
+            VkAccelerationStructureGeometryAabbsDataKHR const *pStruct = static_cast<VkAccelerationStructureGeometryAabbsDataKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR:
+        {   // VkAccelerationStructureGeometryInstancesDataKHR
+            VkAccelerationStructureGeometryInstancesDataKHR const *pStruct = static_cast<VkAccelerationStructureGeometryInstancesDataKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR:
+        {   // VkAccelerationStructureGeometryKHR
+            VkAccelerationStructureGeometryKHR const *pStruct = static_cast<VkAccelerationStructureGeometryKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR:
+        {   // VkAccelerationStructureBuildGeometryInfoKHR
+            VkAccelerationStructureBuildGeometryInfoKHR const *pStruct = static_cast<VkAccelerationStructureBuildGeometryInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkAccelerationStructureGeometryKHR - pGeometries / geometryCount
+            for (uint32_t i = 0; i < pStruct->geometryCount; ++i)
+                vk_struct_cleanup(&pStruct->pGeometries[i]);
+            free(const_cast<VkAccelerationStructureGeometryKHR *>(pStruct->pGeometries));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR:
+        {   // VkAccelerationStructureCreateInfoKHR
+            VkAccelerationStructureCreateInfoKHR const *pStruct = static_cast<VkAccelerationStructureCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR:
+        {   // VkAccelerationStructureDeviceAddressInfoKHR
+            VkAccelerationStructureDeviceAddressInfoKHR const *pStruct = static_cast<VkAccelerationStructureDeviceAddressInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR:
+        {   // VkAccelerationStructureVersionInfoKHR
+            VkAccelerationStructureVersionInfoKHR const *pStruct = static_cast<VkAccelerationStructureVersionInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // uint8_t - pVersionData / VK\_UUID\_SIZE
+            free(const_cast<uint8_t *>(pStruct->pVersionData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR:
+        {   // VkCopyAccelerationStructureInfoKHR
+            VkCopyAccelerationStructureInfoKHR const *pStruct = static_cast<VkCopyAccelerationStructureInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR:
+        {   // VkCopyAccelerationStructureToMemoryInfoKHR
+            VkCopyAccelerationStructureToMemoryInfoKHR const *pStruct = static_cast<VkCopyAccelerationStructureToMemoryInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR:
+        {   // VkCopyMemoryToAccelerationStructureInfoKHR
+            VkCopyMemoryToAccelerationStructureInfoKHR const *pStruct = static_cast<VkCopyMemoryToAccelerationStructureInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR:
+        {   // VkRayTracingPipelineInterfaceCreateInfoKHR
+            VkRayTracingPipelineInterfaceCreateInfoKHR const *pStruct = static_cast<VkRayTracingPipelineInterfaceCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR:
+        {   // VkPipelineLibraryCreateInfoKHR
+            VkPipelineLibraryCreateInfoKHR const *pStruct = static_cast<VkPipelineLibraryCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkPipeline - pLibraries / libraryCount
+            free(const_cast<VkPipeline *>(pStruct->pLibraries));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
+        {   // VkPhysicalDeviceExtendedDynamicStateFeaturesEXT
+            VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT:
+        {   // VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
+            VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM:
+        {   // VkRenderPassTransformBeginInfoQCOM
+            VkRenderPassTransformBeginInfoQCOM const *pStruct = static_cast<VkRenderPassTransformBeginInfoQCOM const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM:
+        {   // VkCopyCommandTransformInfoQCOM
+            VkCopyCommandTransformInfoQCOM const *pStruct = static_cast<VkCopyCommandTransformInfoQCOM const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM:
+        {   // VkCommandBufferInheritanceRenderPassTransformInfoQCOM
+            VkCommandBufferInheritanceRenderPassTransformInfoQCOM const *pStruct = static_cast<VkCommandBufferInheritanceRenderPassTransformInfoQCOM const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV:
+        {   // VkPhysicalDeviceDiagnosticsConfigFeaturesNV
+            VkPhysicalDeviceDiagnosticsConfigFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceDiagnosticsConfigFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV:
+        {   // VkDeviceDiagnosticsConfigCreateInfoNV
+            VkDeviceDiagnosticsConfigCreateInfoNV const *pStruct = static_cast<VkDeviceDiagnosticsConfigCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR:
+        {   // VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+            VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR:
+        {   // VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR
+            VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:
+        {   // VkPhysicalDeviceRobustness2FeaturesEXT
+            VkPhysicalDeviceRobustness2FeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceRobustness2FeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceRobustness2PropertiesEXT
+            VkPhysicalDeviceRobustness2PropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceRobustness2PropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT:
+        {   // VkPhysicalDeviceImageRobustnessFeaturesEXT
+            VkPhysicalDeviceImageRobustnessFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceImageRobustnessFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR:
+        {   // VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
+            VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR:
+        {   // VkPhysicalDevicePortabilitySubsetFeaturesKHR
+            VkPhysicalDevicePortabilitySubsetFeaturesKHR const *pStruct = static_cast<VkPhysicalDevicePortabilitySubsetFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR:
+        {   // VkPhysicalDevicePortabilitySubsetPropertiesKHR
+            VkPhysicalDevicePortabilitySubsetPropertiesKHR const *pStruct = static_cast<VkPhysicalDevicePortabilitySubsetPropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
+        {   // VkPhysicalDevice4444FormatsFeaturesEXT
+            VkPhysicalDevice4444FormatsFeaturesEXT const *pStruct = static_cast<VkPhysicalDevice4444FormatsFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI:
+        {   // VkPhysicalDeviceSubpassShadingFeaturesHUAWEI
+            VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const *pStruct = static_cast<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR:
+        {   // VkBufferCopy2KHR
+            VkBufferCopy2KHR const *pStruct = static_cast<VkBufferCopy2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR:
+        {   // VkImageCopy2KHR
+            VkImageCopy2KHR const *pStruct = static_cast<VkImageCopy2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR:
+        {   // VkImageBlit2KHR
+            VkImageBlit2KHR const *pStruct = static_cast<VkImageBlit2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR:
+        {   // VkBufferImageCopy2KHR
+            VkBufferImageCopy2KHR const *pStruct = static_cast<VkBufferImageCopy2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR:
+        {   // VkImageResolve2KHR
+            VkImageResolve2KHR const *pStruct = static_cast<VkImageResolve2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR:
+        {   // VkCopyBufferInfo2KHR
+            VkCopyBufferInfo2KHR const *pStruct = static_cast<VkCopyBufferInfo2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkBufferCopy2KHR - pRegions / regionCount
+            for (uint32_t i = 0; i < pStruct->regionCount; ++i)
+                vk_struct_cleanup(&pStruct->pRegions[i]);
+            free(const_cast<VkBufferCopy2KHR *>(pStruct->pRegions));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR:
+        {   // VkCopyImageInfo2KHR
+            VkCopyImageInfo2KHR const *pStruct = static_cast<VkCopyImageInfo2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkImageCopy2KHR - pRegions / regionCount
+            for (uint32_t i = 0; i < pStruct->regionCount; ++i)
+                vk_struct_cleanup(&pStruct->pRegions[i]);
+            free(const_cast<VkImageCopy2KHR *>(pStruct->pRegions));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR:
+        {   // VkBlitImageInfo2KHR
+            VkBlitImageInfo2KHR const *pStruct = static_cast<VkBlitImageInfo2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkImageBlit2KHR - pRegions / regionCount
+            for (uint32_t i = 0; i < pStruct->regionCount; ++i)
+                vk_struct_cleanup(&pStruct->pRegions[i]);
+            free(const_cast<VkImageBlit2KHR *>(pStruct->pRegions));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR:
+        {   // VkCopyBufferToImageInfo2KHR
+            VkCopyBufferToImageInfo2KHR const *pStruct = static_cast<VkCopyBufferToImageInfo2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkBufferImageCopy2KHR - pRegions / regionCount
+            for (uint32_t i = 0; i < pStruct->regionCount; ++i)
+                vk_struct_cleanup(&pStruct->pRegions[i]);
+            free(const_cast<VkBufferImageCopy2KHR *>(pStruct->pRegions));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR:
+        {   // VkCopyImageToBufferInfo2KHR
+            VkCopyImageToBufferInfo2KHR const *pStruct = static_cast<VkCopyImageToBufferInfo2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkBufferImageCopy2KHR - pRegions / regionCount
+            for (uint32_t i = 0; i < pStruct->regionCount; ++i)
+                vk_struct_cleanup(&pStruct->pRegions[i]);
+            free(const_cast<VkBufferImageCopy2KHR *>(pStruct->pRegions));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR:
+        {   // VkResolveImageInfo2KHR
+            VkResolveImageInfo2KHR const *pStruct = static_cast<VkResolveImageInfo2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkImageResolve2KHR - pRegions / regionCount
+            for (uint32_t i = 0; i < pStruct->regionCount; ++i)
+                vk_struct_cleanup(&pStruct->pRegions[i]);
+            free(const_cast<VkImageResolve2KHR *>(pStruct->pRegions));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT:
+        {   // VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT
+            VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
+        {   // VkFragmentShadingRateAttachmentInfoKHR
+            VkFragmentShadingRateAttachmentInfoKHR const *pStruct = static_cast<VkFragmentShadingRateAttachmentInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkAttachmentReference2 - pFragmentShadingRateAttachment
+            vk_struct_cleanup(pStruct->pFragmentShadingRateAttachment);
+            free(const_cast<VkAttachmentReference2 *>(pStruct->pFragmentShadingRateAttachment));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR:
+        {   // VkPipelineFragmentShadingRateStateCreateInfoKHR
+            VkPipelineFragmentShadingRateStateCreateInfoKHR const *pStruct = static_cast<VkPipelineFragmentShadingRateStateCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR:
+        {   // VkPhysicalDeviceFragmentShadingRateFeaturesKHR
+            VkPhysicalDeviceFragmentShadingRateFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceFragmentShadingRateFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR:
+        {   // VkPhysicalDeviceFragmentShadingRatePropertiesKHR
+            VkPhysicalDeviceFragmentShadingRatePropertiesKHR const *pStruct = static_cast<VkPhysicalDeviceFragmentShadingRatePropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR:
+        {   // VkPhysicalDeviceFragmentShadingRateKHR
+            VkPhysicalDeviceFragmentShadingRateKHR const *pStruct = static_cast<VkPhysicalDeviceFragmentShadingRateKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR:
+        {   // VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR
+            VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV:
+        {   // VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV
+            VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV:
+        {   // VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV
+            VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const *pStruct = static_cast<VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV:
+        {   // VkPipelineFragmentShadingRateEnumStateCreateInfoNV
+            VkPipelineFragmentShadingRateEnumStateCreateInfoNV const *pStruct = static_cast<VkPipelineFragmentShadingRateEnumStateCreateInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR:
+        {   // VkAccelerationStructureBuildSizesInfoKHR
+            VkAccelerationStructureBuildSizesInfoKHR const *pStruct = static_cast<VkAccelerationStructureBuildSizesInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE:
+        {   // VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE
+            VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const *pStruct = static_cast<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE:
+        {   // VkMutableDescriptorTypeCreateInfoVALVE
+            VkMutableDescriptorTypeCreateInfoVALVE const *pStruct = static_cast<VkMutableDescriptorTypeCreateInfoVALVE const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkMutableDescriptorTypeListVALVE - pMutableDescriptorTypeLists / mutableDescriptorTypeListCount
+            free(const_cast<VkMutableDescriptorTypeListVALVE *>(pStruct->pMutableDescriptorTypeLists));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT:
+        {   // VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT
+            VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV:
+        {   // VkPhysicalDeviceExternalMemoryRDMAFeaturesNV
+            VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT:
+        {   // VkVertexInputBindingDescription2EXT
+            VkVertexInputBindingDescription2EXT const *pStruct = static_cast<VkVertexInputBindingDescription2EXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT:
+        {   // VkVertexInputAttributeDescription2EXT
+            VkVertexInputAttributeDescription2EXT const *pStruct = static_cast<VkVertexInputAttributeDescription2EXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT:
+        {   // VkPhysicalDeviceColorWriteEnableFeaturesEXT
+            VkPhysicalDeviceColorWriteEnableFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceColorWriteEnableFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT:
+        {   // VkPipelineColorWriteCreateInfoEXT
+            VkPipelineColorWriteCreateInfoEXT const *pStruct = static_cast<VkPipelineColorWriteCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkBool32 - pColorWriteEnables / attachmentCount
+            free(const_cast<VkBool32 *>(pStruct->pColorWriteEnables));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR:
+        {   // VkMemoryBarrier2KHR
+            VkMemoryBarrier2KHR const *pStruct = static_cast<VkMemoryBarrier2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR:
+        {   // VkImageMemoryBarrier2KHR
+            VkImageMemoryBarrier2KHR const *pStruct = static_cast<VkImageMemoryBarrier2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR:
+        {   // VkBufferMemoryBarrier2KHR
+            VkBufferMemoryBarrier2KHR const *pStruct = static_cast<VkBufferMemoryBarrier2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR:
+        {   // VkDependencyInfoKHR
+            VkDependencyInfoKHR const *pStruct = static_cast<VkDependencyInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkMemoryBarrier2KHR - pMemoryBarriers / memoryBarrierCount
+            for (uint32_t i = 0; i < pStruct->memoryBarrierCount; ++i)
+                vk_struct_cleanup(&pStruct->pMemoryBarriers[i]);
+            free(const_cast<VkMemoryBarrier2KHR *>(pStruct->pMemoryBarriers));
+
+            // VkBufferMemoryBarrier2KHR - pBufferMemoryBarriers / bufferMemoryBarrierCount
+            for (uint32_t i = 0; i < pStruct->bufferMemoryBarrierCount; ++i)
+                vk_struct_cleanup(&pStruct->pBufferMemoryBarriers[i]);
+            free(const_cast<VkBufferMemoryBarrier2KHR *>(pStruct->pBufferMemoryBarriers));
+
+            // VkImageMemoryBarrier2KHR - pImageMemoryBarriers / imageMemoryBarrierCount
+            for (uint32_t i = 0; i < pStruct->imageMemoryBarrierCount; ++i)
+                vk_struct_cleanup(&pStruct->pImageMemoryBarriers[i]);
+            free(const_cast<VkImageMemoryBarrier2KHR *>(pStruct->pImageMemoryBarriers));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR:
+        {   // VkSemaphoreSubmitInfoKHR
+            VkSemaphoreSubmitInfoKHR const *pStruct = static_cast<VkSemaphoreSubmitInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR:
+        {   // VkCommandBufferSubmitInfoKHR
+            VkCommandBufferSubmitInfoKHR const *pStruct = static_cast<VkCommandBufferSubmitInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR:
+        {   // VkSubmitInfo2KHR
+            VkSubmitInfo2KHR const *pStruct = static_cast<VkSubmitInfo2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSemaphoreSubmitInfoKHR - pWaitSemaphoreInfos / waitSemaphoreInfoCount
+            for (uint32_t i = 0; i < pStruct->waitSemaphoreInfoCount; ++i)
+                vk_struct_cleanup(&pStruct->pWaitSemaphoreInfos[i]);
+            free(const_cast<VkSemaphoreSubmitInfoKHR *>(pStruct->pWaitSemaphoreInfos));
+
+            // VkCommandBufferSubmitInfoKHR - pCommandBufferInfos / commandBufferInfoCount
+            for (uint32_t i = 0; i < pStruct->commandBufferInfoCount; ++i)
+                vk_struct_cleanup(&pStruct->pCommandBufferInfos[i]);
+            free(const_cast<VkCommandBufferSubmitInfoKHR *>(pStruct->pCommandBufferInfos));
+
+            // VkSemaphoreSubmitInfoKHR - pSignalSemaphoreInfos / signalSemaphoreInfoCount
+            for (uint32_t i = 0; i < pStruct->signalSemaphoreInfoCount; ++i)
+                vk_struct_cleanup(&pStruct->pSignalSemaphoreInfos[i]);
+            free(const_cast<VkSemaphoreSubmitInfoKHR *>(pStruct->pSignalSemaphoreInfos));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV:
+        {   // VkQueueFamilyCheckpointProperties2NV
+            VkQueueFamilyCheckpointProperties2NV const *pStruct = static_cast<VkQueueFamilyCheckpointProperties2NV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV:
+        {   // VkCheckpointData2NV
+            VkCheckpointData2NV const *pStruct = static_cast<VkCheckpointData2NV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pCheckpointMarker
+            free(const_cast<void *>(pStruct->pCheckpointMarker));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR:
+        {   // VkPhysicalDeviceSynchronization2FeaturesKHR
+            VkPhysicalDeviceSynchronization2FeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceSynchronization2FeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR:
+        {   // VkVideoQueueFamilyProperties2KHR
+            VkVideoQueueFamilyProperties2KHR const *pStruct = static_cast<VkVideoQueueFamilyProperties2KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR:
+        {   // VkVideoProfilesKHR
+            VkVideoProfilesKHR const *pStruct = static_cast<VkVideoProfilesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoProfileKHR - pProfiles
+            vk_struct_cleanup(pStruct->pProfiles);
+            free(const_cast<VkVideoProfileKHR *>(pStruct->pProfiles));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR:
+        {   // VkPhysicalDeviceVideoFormatInfoKHR
+            VkPhysicalDeviceVideoFormatInfoKHR const *pStruct = static_cast<VkPhysicalDeviceVideoFormatInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoProfilesKHR - pVideoProfiles
+            vk_struct_cleanup(pStruct->pVideoProfiles);
+            free(const_cast<VkVideoProfilesKHR *>(pStruct->pVideoProfiles));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR:
+        {   // VkVideoFormatPropertiesKHR
+            VkVideoFormatPropertiesKHR const *pStruct = static_cast<VkVideoFormatPropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR:
+        {   // VkVideoProfileKHR
+            VkVideoProfileKHR const *pStruct = static_cast<VkVideoProfileKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR:
+        {   // VkVideoCapabilitiesKHR
+            VkVideoCapabilitiesKHR const *pStruct = static_cast<VkVideoCapabilitiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR:
+        {   // VkVideoGetMemoryPropertiesKHR
+            VkVideoGetMemoryPropertiesKHR const *pStruct = static_cast<VkVideoGetMemoryPropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkMemoryRequirements2 - pMemoryRequirements
+            vk_struct_cleanup(pStruct->pMemoryRequirements);
+            free(const_cast<VkMemoryRequirements2 *>(pStruct->pMemoryRequirements));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR:
+        {   // VkVideoBindMemoryKHR
+            VkVideoBindMemoryKHR const *pStruct = static_cast<VkVideoBindMemoryKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR:
+        {   // VkVideoPictureResourceKHR
+            VkVideoPictureResourceKHR const *pStruct = static_cast<VkVideoPictureResourceKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR:
+        {   // VkVideoReferenceSlotKHR
+            VkVideoReferenceSlotKHR const *pStruct = static_cast<VkVideoReferenceSlotKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoPictureResourceKHR - pPictureResource
+            vk_struct_cleanup(pStruct->pPictureResource);
+            free(const_cast<VkVideoPictureResourceKHR *>(pStruct->pPictureResource));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR:
+        {   // VkVideoDecodeInfoKHR
+            VkVideoDecodeInfoKHR const *pStruct = static_cast<VkVideoDecodeInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoReferenceSlotKHR - pSetupReferenceSlot
+            vk_struct_cleanup(pStruct->pSetupReferenceSlot);
+            free(const_cast<VkVideoReferenceSlotKHR *>(pStruct->pSetupReferenceSlot));
+
+            // VkVideoReferenceSlotKHR - pReferenceSlots / referenceSlotCount
+            for (uint32_t i = 0; i < pStruct->referenceSlotCount; ++i)
+                vk_struct_cleanup(&pStruct->pReferenceSlots[i]);
+            free(const_cast<VkVideoReferenceSlotKHR *>(pStruct->pReferenceSlots));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT:
+        {   // VkVideoDecodeH264ProfileEXT
+            VkVideoDecodeH264ProfileEXT const *pStruct = static_cast<VkVideoDecodeH264ProfileEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT:
+        {   // VkVideoDecodeH264CapabilitiesEXT
+            VkVideoDecodeH264CapabilitiesEXT const *pStruct = static_cast<VkVideoDecodeH264CapabilitiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT:
+        {   // VkVideoDecodeH264SessionCreateInfoEXT
+            VkVideoDecodeH264SessionCreateInfoEXT const *pStruct = static_cast<VkVideoDecodeH264SessionCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkExtensionProperties - pStdExtensionVersion
+            free(const_cast<VkExtensionProperties *>(pStruct->pStdExtensionVersion));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT:
+        {   // VkVideoDecodeH264SessionParametersAddInfoEXT
+            VkVideoDecodeH264SessionParametersAddInfoEXT const *pStruct = static_cast<VkVideoDecodeH264SessionParametersAddInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoH264SequenceParameterSet - pSpsStd / spsStdCount
+            free(const_cast<StdVideoH264SequenceParameterSet *>(pStruct->pSpsStd));
+
+            // StdVideoH264PictureParameterSet - pPpsStd / ppsStdCount
+            free(const_cast<StdVideoH264PictureParameterSet *>(pStruct->pPpsStd));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT:
+        {   // VkVideoDecodeH264SessionParametersCreateInfoEXT
+            VkVideoDecodeH264SessionParametersCreateInfoEXT const *pStruct = static_cast<VkVideoDecodeH264SessionParametersCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoDecodeH264SessionParametersAddInfoEXT - pParametersAddInfo
+            vk_struct_cleanup(pStruct->pParametersAddInfo);
+            free(const_cast<VkVideoDecodeH264SessionParametersAddInfoEXT *>(pStruct->pParametersAddInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT:
+        {   // VkVideoDecodeH264PictureInfoEXT
+            VkVideoDecodeH264PictureInfoEXT const *pStruct = static_cast<VkVideoDecodeH264PictureInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoDecodeH264PictureInfo - pStdPictureInfo
+            free(const_cast<StdVideoDecodeH264PictureInfo *>(pStruct->pStdPictureInfo));
+
+            // uint32_t - pSlicesDataOffsets / slicesCount
+            free(const_cast<uint32_t *>(pStruct->pSlicesDataOffsets));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT:
+        {   // VkVideoDecodeH264DpbSlotInfoEXT
+            VkVideoDecodeH264DpbSlotInfoEXT const *pStruct = static_cast<VkVideoDecodeH264DpbSlotInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoDecodeH264ReferenceInfo - pStdReferenceInfo
+            free(const_cast<StdVideoDecodeH264ReferenceInfo *>(pStruct->pStdReferenceInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT:
+        {   // VkVideoDecodeH264MvcEXT
+            VkVideoDecodeH264MvcEXT const *pStruct = static_cast<VkVideoDecodeH264MvcEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoDecodeH264Mvc - pStdMvc
+            free(const_cast<StdVideoDecodeH264Mvc *>(pStruct->pStdMvc));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT:
+        {   // VkVideoDecodeH265ProfileEXT
+            VkVideoDecodeH265ProfileEXT const *pStruct = static_cast<VkVideoDecodeH265ProfileEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT:
+        {   // VkVideoDecodeH265CapabilitiesEXT
+            VkVideoDecodeH265CapabilitiesEXT const *pStruct = static_cast<VkVideoDecodeH265CapabilitiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT:
+        {   // VkVideoDecodeH265SessionCreateInfoEXT
+            VkVideoDecodeH265SessionCreateInfoEXT const *pStruct = static_cast<VkVideoDecodeH265SessionCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkExtensionProperties - pStdExtensionVersion
+            free(const_cast<VkExtensionProperties *>(pStruct->pStdExtensionVersion));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT:
+        {   // VkVideoDecodeH265SessionParametersAddInfoEXT
+            VkVideoDecodeH265SessionParametersAddInfoEXT const *pStruct = static_cast<VkVideoDecodeH265SessionParametersAddInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoH265SequenceParameterSet - pSpsStd / spsStdCount
+            free(const_cast<StdVideoH265SequenceParameterSet *>(pStruct->pSpsStd));
+
+            // StdVideoH265PictureParameterSet - pPpsStd / ppsStdCount
+            free(const_cast<StdVideoH265PictureParameterSet *>(pStruct->pPpsStd));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT:
+        {   // VkVideoDecodeH265SessionParametersCreateInfoEXT
+            VkVideoDecodeH265SessionParametersCreateInfoEXT const *pStruct = static_cast<VkVideoDecodeH265SessionParametersCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoDecodeH265SessionParametersAddInfoEXT - pParametersAddInfo
+            vk_struct_cleanup(pStruct->pParametersAddInfo);
+            free(const_cast<VkVideoDecodeH265SessionParametersAddInfoEXT *>(pStruct->pParametersAddInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT:
+        {   // VkVideoDecodeH265PictureInfoEXT
+            VkVideoDecodeH265PictureInfoEXT const *pStruct = static_cast<VkVideoDecodeH265PictureInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoDecodeH265PictureInfo - pStdPictureInfo
+            free(const_cast<StdVideoDecodeH265PictureInfo *>(pStruct->pStdPictureInfo));
+
+            // uint32_t - pSlicesDataOffsets / slicesCount
+            free(const_cast<uint32_t *>(pStruct->pSlicesDataOffsets));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT:
+        {   // VkVideoDecodeH265DpbSlotInfoEXT
+            VkVideoDecodeH265DpbSlotInfoEXT const *pStruct = static_cast<VkVideoDecodeH265DpbSlotInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoDecodeH265ReferenceInfo - pStdReferenceInfo
+            free(const_cast<StdVideoDecodeH265ReferenceInfo *>(pStruct->pStdReferenceInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR:
+        {   // VkVideoSessionCreateInfoKHR
+            VkVideoSessionCreateInfoKHR const *pStruct = static_cast<VkVideoSessionCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoProfileKHR - pVideoProfile
+            vk_struct_cleanup(pStruct->pVideoProfile);
+            free(const_cast<VkVideoProfileKHR *>(pStruct->pVideoProfile));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR:
+        {   // VkVideoSessionParametersCreateInfoKHR
+            VkVideoSessionParametersCreateInfoKHR const *pStruct = static_cast<VkVideoSessionParametersCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR:
+        {   // VkVideoSessionParametersUpdateInfoKHR
+            VkVideoSessionParametersUpdateInfoKHR const *pStruct = static_cast<VkVideoSessionParametersUpdateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR:
+        {   // VkVideoBeginCodingInfoKHR
+            VkVideoBeginCodingInfoKHR const *pStruct = static_cast<VkVideoBeginCodingInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoReferenceSlotKHR - pReferenceSlots / referenceSlotCount
+            for (uint32_t i = 0; i < pStruct->referenceSlotCount; ++i)
+                vk_struct_cleanup(&pStruct->pReferenceSlots[i]);
+            free(const_cast<VkVideoReferenceSlotKHR *>(pStruct->pReferenceSlots));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR:
+        {   // VkVideoEndCodingInfoKHR
+            VkVideoEndCodingInfoKHR const *pStruct = static_cast<VkVideoEndCodingInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR:
+        {   // VkVideoCodingControlInfoKHR
+            VkVideoCodingControlInfoKHR const *pStruct = static_cast<VkVideoCodingControlInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR:
+        {   // VkVideoEncodeInfoKHR
+            VkVideoEncodeInfoKHR const *pStruct = static_cast<VkVideoEncodeInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoReferenceSlotKHR - pSetupReferenceSlot
+            vk_struct_cleanup(pStruct->pSetupReferenceSlot);
+            free(const_cast<VkVideoReferenceSlotKHR *>(pStruct->pSetupReferenceSlot));
+
+            // VkVideoReferenceSlotKHR - pReferenceSlots / referenceSlotCount
+            for (uint32_t i = 0; i < pStruct->referenceSlotCount; ++i)
+                vk_struct_cleanup(&pStruct->pReferenceSlots[i]);
+            free(const_cast<VkVideoReferenceSlotKHR *>(pStruct->pReferenceSlots));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR:
+        {   // VkVideoEncodeRateControlInfoKHR
+            VkVideoEncodeRateControlInfoKHR const *pStruct = static_cast<VkVideoEncodeRateControlInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT:
+        {   // VkVideoEncodeH264CapabilitiesEXT
+            VkVideoEncodeH264CapabilitiesEXT const *pStruct = static_cast<VkVideoEncodeH264CapabilitiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT:
+        {   // VkVideoEncodeH264SessionCreateInfoEXT
+            VkVideoEncodeH264SessionCreateInfoEXT const *pStruct = static_cast<VkVideoEncodeH264SessionCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkExtensionProperties - pStdExtensionVersion
+            free(const_cast<VkExtensionProperties *>(pStruct->pStdExtensionVersion));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT:
+        {   // VkVideoEncodeH264SessionParametersAddInfoEXT
+            VkVideoEncodeH264SessionParametersAddInfoEXT const *pStruct = static_cast<VkVideoEncodeH264SessionParametersAddInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoH264SequenceParameterSet - pSpsStd / spsStdCount
+            free(const_cast<StdVideoH264SequenceParameterSet *>(pStruct->pSpsStd));
+
+            // StdVideoH264PictureParameterSet - pPpsStd / ppsStdCount
+            free(const_cast<StdVideoH264PictureParameterSet *>(pStruct->pPpsStd));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT:
+        {   // VkVideoEncodeH264SessionParametersCreateInfoEXT
+            VkVideoEncodeH264SessionParametersCreateInfoEXT const *pStruct = static_cast<VkVideoEncodeH264SessionParametersCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoEncodeH264SessionParametersAddInfoEXT - pParametersAddInfo
+            vk_struct_cleanup(pStruct->pParametersAddInfo);
+            free(const_cast<VkVideoEncodeH264SessionParametersAddInfoEXT *>(pStruct->pParametersAddInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT:
+        {   // VkVideoEncodeH264DpbSlotInfoEXT
+            VkVideoEncodeH264DpbSlotInfoEXT const *pStruct = static_cast<VkVideoEncodeH264DpbSlotInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoEncodeH264PictureInfo - pStdPictureInfo
+            free(const_cast<StdVideoEncodeH264PictureInfo *>(pStruct->pStdPictureInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT:
+        {   // VkVideoEncodeH264VclFrameInfoEXT
+            VkVideoEncodeH264VclFrameInfoEXT const *pStruct = static_cast<VkVideoEncodeH264VclFrameInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoEncodeH264DpbSlotInfoEXT - pRefDefaultFinalList0Entries / refDefaultFinalList0EntryCount
+            for (uint32_t i = 0; i < pStruct->refDefaultFinalList0EntryCount; ++i)
+                vk_struct_cleanup(&pStruct->pRefDefaultFinalList0Entries[i]);
+            free(const_cast<VkVideoEncodeH264DpbSlotInfoEXT *>(pStruct->pRefDefaultFinalList0Entries));
+
+            // VkVideoEncodeH264DpbSlotInfoEXT - pRefDefaultFinalList1Entries / refDefaultFinalList1EntryCount
+            for (uint32_t i = 0; i < pStruct->refDefaultFinalList1EntryCount; ++i)
+                vk_struct_cleanup(&pStruct->pRefDefaultFinalList1Entries[i]);
+            free(const_cast<VkVideoEncodeH264DpbSlotInfoEXT *>(pStruct->pRefDefaultFinalList1Entries));
+
+            // VkVideoEncodeH264NaluSliceEXT - pNaluSliceEntries / naluSliceEntryCount
+            for (uint32_t i = 0; i < pStruct->naluSliceEntryCount; ++i)
+                vk_struct_cleanup(&pStruct->pNaluSliceEntries[i]);
+            free(const_cast<VkVideoEncodeH264NaluSliceEXT *>(pStruct->pNaluSliceEntries));
+
+            // VkVideoEncodeH264DpbSlotInfoEXT - pCurrentPictureInfo
+            vk_struct_cleanup(pStruct->pCurrentPictureInfo);
+            free(const_cast<VkVideoEncodeH264DpbSlotInfoEXT *>(pStruct->pCurrentPictureInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT:
+        {   // VkVideoEncodeH264EmitPictureParametersEXT
+            VkVideoEncodeH264EmitPictureParametersEXT const *pStruct = static_cast<VkVideoEncodeH264EmitPictureParametersEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT:
+        {   // VkVideoEncodeH264ProfileEXT
+            VkVideoEncodeH264ProfileEXT const *pStruct = static_cast<VkVideoEncodeH264ProfileEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT:
+        {   // VkVideoEncodeH264NaluSliceEXT
+            VkVideoEncodeH264NaluSliceEXT const *pStruct = static_cast<VkVideoEncodeH264NaluSliceEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoEncodeH264SliceHeader - pSliceHeaderStd
+            free(const_cast<StdVideoEncodeH264SliceHeader *>(pStruct->pSliceHeaderStd));
+
+            // VkVideoEncodeH264DpbSlotInfoEXT - pRefFinalList0Entries / refFinalList0EntryCount
+            for (uint32_t i = 0; i < pStruct->refFinalList0EntryCount; ++i)
+                vk_struct_cleanup(&pStruct->pRefFinalList0Entries[i]);
+            free(const_cast<VkVideoEncodeH264DpbSlotInfoEXT *>(pStruct->pRefFinalList0Entries));
+
+            // VkVideoEncodeH264DpbSlotInfoEXT - pRefFinalList1Entries / refFinalList1EntryCount
+            for (uint32_t i = 0; i < pStruct->refFinalList1EntryCount; ++i)
+                vk_struct_cleanup(&pStruct->pRefFinalList1Entries[i]);
+            free(const_cast<VkVideoEncodeH264DpbSlotInfoEXT *>(pStruct->pRefFinalList1Entries));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT:
+        {   // VkVideoEncodeH265CapabilitiesEXT
+            VkVideoEncodeH265CapabilitiesEXT const *pStruct = static_cast<VkVideoEncodeH265CapabilitiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_EXT:
+        {   // VkVideoEncodeH265SessionCreateInfoEXT
+            VkVideoEncodeH265SessionCreateInfoEXT const *pStruct = static_cast<VkVideoEncodeH265SessionCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkExtensionProperties - pStdExtensionVersion
+            free(const_cast<VkExtensionProperties *>(pStruct->pStdExtensionVersion));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT:
+        {   // VkVideoEncodeH265SessionParametersAddInfoEXT
+            VkVideoEncodeH265SessionParametersAddInfoEXT const *pStruct = static_cast<VkVideoEncodeH265SessionParametersAddInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoH265VideoParameterSet - pVpsStd / vpsStdCount
+            free(const_cast<StdVideoH265VideoParameterSet *>(pStruct->pVpsStd));
+
+            // StdVideoH265SequenceParameterSet - pSpsStd / spsStdCount
+            free(const_cast<StdVideoH265SequenceParameterSet *>(pStruct->pSpsStd));
+
+            // StdVideoH265PictureParameterSet - pPpsStd / ppsStdCount
+            free(const_cast<StdVideoH265PictureParameterSet *>(pStruct->pPpsStd));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT:
+        {   // VkVideoEncodeH265SessionParametersCreateInfoEXT
+            VkVideoEncodeH265SessionParametersCreateInfoEXT const *pStruct = static_cast<VkVideoEncodeH265SessionParametersCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoEncodeH265SessionParametersAddInfoEXT - pParametersAddInfo
+            vk_struct_cleanup(pStruct->pParametersAddInfo);
+            free(const_cast<VkVideoEncodeH265SessionParametersAddInfoEXT *>(pStruct->pParametersAddInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT:
+        {   // VkVideoEncodeH265VclFrameInfoEXT
+            VkVideoEncodeH265VclFrameInfoEXT const *pStruct = static_cast<VkVideoEncodeH265VclFrameInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoEncodeH265ReferenceListsEXT - pReferenceFinalLists
+            vk_struct_cleanup(pStruct->pReferenceFinalLists);
+            free(const_cast<VkVideoEncodeH265ReferenceListsEXT *>(pStruct->pReferenceFinalLists));
+
+            // VkVideoEncodeH265NaluSliceEXT - pNaluSliceEntries / naluSliceEntryCount
+            for (uint32_t i = 0; i < pStruct->naluSliceEntryCount; ++i)
+                vk_struct_cleanup(&pStruct->pNaluSliceEntries[i]);
+            free(const_cast<VkVideoEncodeH265NaluSliceEXT *>(pStruct->pNaluSliceEntries));
+
+            // StdVideoEncodeH265PictureInfo - pCurrentPictureInfo
+            free(const_cast<StdVideoEncodeH265PictureInfo *>(pStruct->pCurrentPictureInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT:
+        {   // VkVideoEncodeH265EmitPictureParametersEXT
+            VkVideoEncodeH265EmitPictureParametersEXT const *pStruct = static_cast<VkVideoEncodeH265EmitPictureParametersEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_EXT:
+        {   // VkVideoEncodeH265NaluSliceEXT
+            VkVideoEncodeH265NaluSliceEXT const *pStruct = static_cast<VkVideoEncodeH265NaluSliceEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoEncodeH265ReferenceListsEXT - pReferenceFinalLists
+            vk_struct_cleanup(pStruct->pReferenceFinalLists);
+            free(const_cast<VkVideoEncodeH265ReferenceListsEXT *>(pStruct->pReferenceFinalLists));
+
+            // StdVideoEncodeH265SliceHeader - pSliceHeaderStd
+            free(const_cast<StdVideoEncodeH265SliceHeader *>(pStruct->pSliceHeaderStd));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT:
+        {   // VkVideoEncodeH265ProfileEXT
+            VkVideoEncodeH265ProfileEXT const *pStruct = static_cast<VkVideoEncodeH265ProfileEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT:
+        {   // VkVideoEncodeH265DpbSlotInfoEXT
+            VkVideoEncodeH265DpbSlotInfoEXT const *pStruct = static_cast<VkVideoEncodeH265DpbSlotInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // StdVideoEncodeH265ReferenceInfo - pStdReferenceInfo
+            free(const_cast<StdVideoEncodeH265ReferenceInfo *>(pStruct->pStdReferenceInfo));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT:
+        {   // VkVideoEncodeH265ReferenceListsEXT
+            VkVideoEncodeH265ReferenceListsEXT const *pStruct = static_cast<VkVideoEncodeH265ReferenceListsEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkVideoEncodeH265DpbSlotInfoEXT - pReferenceList0Entries / referenceList0EntryCount
+            for (uint32_t i = 0; i < pStruct->referenceList0EntryCount; ++i)
+                vk_struct_cleanup(&pStruct->pReferenceList0Entries[i]);
+            free(const_cast<VkVideoEncodeH265DpbSlotInfoEXT *>(pStruct->pReferenceList0Entries));
+
+            // VkVideoEncodeH265DpbSlotInfoEXT - pReferenceList1Entries / referenceList1EntryCount
+            for (uint32_t i = 0; i < pStruct->referenceList1EntryCount; ++i)
+                vk_struct_cleanup(&pStruct->pReferenceList1Entries[i]);
+            free(const_cast<VkVideoEncodeH265DpbSlotInfoEXT *>(pStruct->pReferenceList1Entries));
+
+            // StdVideoEncodeH265ReferenceModifications - pReferenceModifications
+            free(const_cast<StdVideoEncodeH265ReferenceModifications *>(pStruct->pReferenceModifications));
+        }
+
+        break;
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV:
+        {   // VkPhysicalDeviceInheritedViewportScissorFeaturesNV
+            VkPhysicalDeviceInheritedViewportScissorFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceInheritedViewportScissorFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV:
+        {   // VkCommandBufferInheritanceViewportScissorInfoNV
+            VkCommandBufferInheritanceViewportScissorInfoNV const *pStruct = static_cast<VkCommandBufferInheritanceViewportScissorInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkViewport - pViewportDepths
+            free(const_cast<VkViewport *>(pStruct->pViewportDepths));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT:
+        {   // VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
+            VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT:
+        {   // VkPhysicalDeviceProvokingVertexFeaturesEXT
+            VkPhysicalDeviceProvokingVertexFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceProvokingVertexFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceProvokingVertexPropertiesEXT
+            VkPhysicalDeviceProvokingVertexPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceProvokingVertexPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT:
+        {   // VkPipelineRasterizationProvokingVertexStateCreateInfoEXT
+            VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const *pStruct = static_cast<VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX:
+        {   // VkCuModuleCreateInfoNVX
+            VkCuModuleCreateInfoNVX const *pStruct = static_cast<VkCuModuleCreateInfoNVX const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // void - pData / dataSize
+            free(const_cast<void *>(pStruct->pData));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX:
+        {   // VkCuFunctionCreateInfoNVX
+            VkCuFunctionCreateInfoNVX const *pStruct = static_cast<VkCuFunctionCreateInfoNVX const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // char - pName / null-terminated
+            free(const_cast<char *>(pStruct->pName));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR:
+        {   // VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR
+            VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR:
+        {   // VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR
+            VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const *pStruct = static_cast<VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT:
+        {   // VkPhysicalDeviceDrmPropertiesEXT
+            VkPhysicalDeviceDrmPropertiesEXT const *pStruct = static_cast<VkPhysicalDeviceDrmPropertiesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV:
+        {   // VkPhysicalDeviceRayTracingMotionBlurFeaturesNV
+            VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const *pStruct = static_cast<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV:
+        {   // VkAccelerationStructureGeometryMotionTrianglesDataNV
+            VkAccelerationStructureGeometryMotionTrianglesDataNV const *pStruct = static_cast<VkAccelerationStructureGeometryMotionTrianglesDataNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV:
+        {   // VkAccelerationStructureMotionInfoNV
+            VkAccelerationStructureMotionInfoNV const *pStruct = static_cast<VkAccelerationStructureMotionInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV:
+        {   // VkMemoryGetRemoteAddressInfoNV
+            VkMemoryGetRemoteAddressInfoNV const *pStruct = static_cast<VkMemoryGetRemoteAddressInfoNV const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA:
+        {   // VkImportMemoryBufferCollectionFUCHSIA
+            VkImportMemoryBufferCollectionFUCHSIA const *pStruct = static_cast<VkImportMemoryBufferCollectionFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA:
+        {   // VkBufferCollectionImageCreateInfoFUCHSIA
+            VkBufferCollectionImageCreateInfoFUCHSIA const *pStruct = static_cast<VkBufferCollectionImageCreateInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA:
+        {   // VkBufferCollectionBufferCreateInfoFUCHSIA
+            VkBufferCollectionBufferCreateInfoFUCHSIA const *pStruct = static_cast<VkBufferCollectionBufferCreateInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA:
+        {   // VkBufferCollectionCreateInfoFUCHSIA
+            VkBufferCollectionCreateInfoFUCHSIA const *pStruct = static_cast<VkBufferCollectionCreateInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA:
+        {   // VkBufferCollectionPropertiesFUCHSIA
+            VkBufferCollectionPropertiesFUCHSIA const *pStruct = static_cast<VkBufferCollectionPropertiesFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA:
+        {   // VkBufferConstraintsInfoFUCHSIA
+            VkBufferConstraintsInfoFUCHSIA const *pStruct = static_cast<VkBufferConstraintsInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA:
+        {   // VkSysmemColorSpaceFUCHSIA
+            VkSysmemColorSpaceFUCHSIA const *pStruct = static_cast<VkSysmemColorSpaceFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA:
+        {   // VkImageFormatConstraintsInfoFUCHSIA
+            VkImageFormatConstraintsInfoFUCHSIA const *pStruct = static_cast<VkImageFormatConstraintsInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSysmemColorSpaceFUCHSIA - pColorSpaces
+            vk_struct_cleanup(pStruct->pColorSpaces);
+            free(const_cast<VkSysmemColorSpaceFUCHSIA *>(pStruct->pColorSpaces));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA:
+        {   // VkImageConstraintsInfoFUCHSIA
+            VkImageConstraintsInfoFUCHSIA const *pStruct = static_cast<VkImageConstraintsInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkImageFormatConstraintsInfoFUCHSIA - pFormatConstraints / formatConstraintsCount
+            for (uint32_t i = 0; i < pStruct->formatConstraintsCount; ++i)
+                vk_struct_cleanup(&pStruct->pFormatConstraints[i]);
+            free(const_cast<VkImageFormatConstraintsInfoFUCHSIA *>(pStruct->pFormatConstraints));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA:
+        {   // VkBufferCollectionConstraintsInfoFUCHSIA
+            VkBufferCollectionConstraintsInfoFUCHSIA const *pStruct = static_cast<VkBufferCollectionConstraintsInfoFUCHSIA const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_FUCHSIA
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT:
+        {   // VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT
+            VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const *pStruct = static_cast<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR:
+        {   // VkFormatProperties3KHR
+            VkFormatProperties3KHR const *pStruct = static_cast<VkFormatProperties3KHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT:
+        {   // VkDrmFormatModifierPropertiesList2EXT
+            VkDrmFormatModifierPropertiesList2EXT const *pStruct = static_cast<VkDrmFormatModifierPropertiesList2EXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkDrmFormatModifierProperties2EXT - pDrmFormatModifierProperties / drmFormatModifierCount
+            free(const_cast<VkDrmFormatModifierProperties2EXT *>(pStruct->pDrmFormatModifierProperties));
+        }
+
+        break;
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID:
+        {   // VkAndroidHardwareBufferFormatProperties2ANDROID
+            VkAndroidHardwareBufferFormatProperties2ANDROID const *pStruct = static_cast<VkAndroidHardwareBufferFormatProperties2ANDROID const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+
+    case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR:
+        {   // VkPipelineRenderingCreateInfoKHR
+            VkPipelineRenderingCreateInfoKHR const *pStruct = static_cast<VkPipelineRenderingCreateInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkFormat - pColorAttachmentFormats / colorAttachmentCount
+            free(const_cast<VkFormat *>(pStruct->pColorAttachmentFormats));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDERING_INFO_KHR:
+        {   // VkRenderingInfoKHR
+            VkRenderingInfoKHR const *pStruct = static_cast<VkRenderingInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkRenderingAttachmentInfoKHR - pColorAttachments / colorAttachmentCount
+            for (uint32_t i = 0; i < pStruct->colorAttachmentCount; ++i)
+                vk_struct_cleanup(&pStruct->pColorAttachments[i]);
+            free(const_cast<VkRenderingAttachmentInfoKHR *>(pStruct->pColorAttachments));
+
+            // VkRenderingAttachmentInfoKHR - pDepthAttachment
+            vk_struct_cleanup(pStruct->pDepthAttachment);
+            free(const_cast<VkRenderingAttachmentInfoKHR *>(pStruct->pDepthAttachment));
+
+            // VkRenderingAttachmentInfoKHR - pStencilAttachment
+            vk_struct_cleanup(pStruct->pStencilAttachment);
+            free(const_cast<VkRenderingAttachmentInfoKHR *>(pStruct->pStencilAttachment));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR:
+        {   // VkRenderingAttachmentInfoKHR
+            VkRenderingAttachmentInfoKHR const *pStruct = static_cast<VkRenderingAttachmentInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
+        {   // VkRenderingFragmentShadingRateAttachmentInfoKHR
+            VkRenderingFragmentShadingRateAttachmentInfoKHR const *pStruct = static_cast<VkRenderingFragmentShadingRateAttachmentInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT:
+        {   // VkRenderingFragmentDensityMapAttachmentInfoEXT
+            VkRenderingFragmentDensityMapAttachmentInfoEXT const *pStruct = static_cast<VkRenderingFragmentDensityMapAttachmentInfoEXT const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR:
+        {   // VkPhysicalDeviceDynamicRenderingFeaturesKHR
+            VkPhysicalDeviceDynamicRenderingFeaturesKHR const *pStruct = static_cast<VkPhysicalDeviceDynamicRenderingFeaturesKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR:
+        {   // VkCommandBufferInheritanceRenderingInfoKHR
+            VkCommandBufferInheritanceRenderingInfoKHR const *pStruct = static_cast<VkCommandBufferInheritanceRenderingInfoKHR const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkFormat - pColorAttachmentFormats / colorAttachmentCount
+            free(const_cast<VkFormat *>(pStruct->pColorAttachmentFormats));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD:
+        {   // VkAttachmentSampleCountInfoAMD
+            VkAttachmentSampleCountInfoAMD const *pStruct = static_cast<VkAttachmentSampleCountInfoAMD const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+
+            // VkSampleCountFlagBits - pColorAttachmentSamples / colorAttachmentCount
+            free(const_cast<VkSampleCountFlagBits *>(pStruct->pColorAttachmentSamples));
+        }
+
+        break;
+
+    case VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX:
+        {   // VkMultiviewPerViewAttributesInfoNVX
+            VkMultiviewPerViewAttributesInfoNVX const *pStruct = static_cast<VkMultiviewPerViewAttributesInfoNVX const *>(pData);
+
+            // void - pNext
+            vk_struct_cleanup(pStruct->pNext);
+            free(const_cast<void *>(pStruct->pNext));
+        }
+
+        break;
+
+
+    default:
+        break;
+    }
+}
+
+#endif // VK_STRUCT_CLEANUP_CONFIG_MAIN
+
+#endif // VK_STRUCT_CLEANUP_V198_HPP
diff --git a/include/detail_value_serialization/vk_value_serialization_v198.hpp b/include/detail_value_serialization/vk_value_serialization_v198.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..4e9621ebe6aa25163ebcdfa4266ce9572a1f5a3b
--- /dev/null
+++ b/include/detail_value_serialization/vk_value_serialization_v198.hpp
@@ -0,0 +1,2203 @@
+/*
+    Copyright (C) 2020 George Cave - gcave@stablecoder.ca
+
+    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.
+*/
+
+/*
+    This file was auto-generated by the Vulkan mini-libs utility can be found at
+    https://github.com/stablecoder/vulkan-mini-libs.git
+    or
+    https://git.stabletec.com/utilities/vulkan-mini-libs.git
+
+    Check for an updated version anytime, or state concerns/bugs.
+*/
+
+#ifndef VK_VALUE_SERIALIZATION_V198_HPP
+#define VK_VALUE_SERIALIZATION_V198_HPP
+
+/*  USAGE:
+    To use, include this header where the declarations for the boolean checks are required.
+
+    On *ONE* compilation unit, include the definition of `#define VK_VALUE_SERIALIZATION_CONFIG_MAIN`
+    so that the definitions are compiled somewhere following the one definition rule.
+*/
+
+#include <vulkan/vulkan.h>
+
+#include <string>
+#include <string_view>
+
+static_assert(VK_HEADER_VERSION == 198, "Incompatible VK_HEADER_VERSION!");
+
+/**
+ * @brief Macro that automatically stringifies the given Vulkan type for serialization
+ * @param VKTYPE Actual Vulkan type
+ * @param VALUE Value to be serialized
+ * @param STRPTR Pointer to the string to store the serialization in. Only modified if true is
+ * returned.
+ * @return True if serialization was successful. False otherwise.
+ */
+#define VK_SERIALIZE(VKTYPE, VALUE, STRPTR) vk_serialize<VKTYPE>(#VKTYPE, VALUE, STRPTR)
+
+/**
+ * @brief Macro that automatically stringifies the given Vulkan type for parsing
+ * @param VKTYPE Actual Vulkan type
+ * @param STRING String to be parsed
+ * @param VALPTR Pointer to the value to store the parsed value in. Only modified if true is
+ * returned.
+ * @return True if serialization was successful. False otherwise.
+ */
+#define VK_PARSE(VKTYPE, STRING, VALPTR) vk_parse<VKTYPE>(#VKTYPE, STRING, VALPTR)
+
+/**
+ * @brief Serializes a Vulkan enumerator/flag type
+ * @param vkType Name of the Vulkan enumerator/flag type
+ * @param vkValue Value being serialized
+ * @param pString Pointer to a string that will be modified with the serialized value. Only modified
+ * if true is returned.
+ * @return True the value was successfully serialized. False otherwise.
+ */
+bool vk_serialize(std::string_view vkType, uint32_t vkValue, std::string *pString);
+
+/**
+ * @brief Parses a Vulkan enumerator/flag serialized string
+ * @param vkType Name of the Vulkan enumerator/flag type
+ * @param vkString String being parsed
+ * @param pValue Pointer to a value that will be modified with the parsed value. Only modified if
+ * true is returned.
+ * @return True the value was successfully serialized. False otherwise.
+ */
+bool vk_parse(std::string_view vkType, std::string vkString, uint32_t *pValue);
+
+/**
+ * @brief Serializes a Vulkan enumerator/flag type
+ * @tparam Vulkan type being serialized
+ * @param vkType Name of the Vulkan enumerator/flag type
+ * @param vkValue Value being serialized
+ * @param pString Pointer to a string that will be modified with the serialized value. Only modified
+ * if true is returned.
+ * @return True the value was successfully serialized. False otherwise.
+ */
+template <typename T>
+bool vk_serialize(std::string_view vkType, T vkValue, std::string *pString) {
+    return vk_serialize(vkType, static_cast<uint32_t>(vkValue), pString);
+}
+
+/**
+ * @brief Parses a Vulkan enumerator/flag serialized string
+ * @tparam Vulkan type being parsed
+ * @param vkType Name of the Vulkan enumerator/flag type
+ * @param vkString String being parsed
+ * @param pValue Pointer to a value that will be modified with the parsed value. Only modified if
+ * true is returned.
+ * @return True the value was successfully serialized. False otherwise.
+ */
+template <typename T>
+bool vk_parse(std::string_view vkType, std::string vkString, T *pValue) {
+    uint32_t retVal = 0;
+    auto found = vk_parse(vkType, vkString, &retVal);
+    if (found) {
+        *pValue = static_cast<T>(retVal);
+    }
+    return found;
+}
+
+#ifdef VK_VALUE_SERIALIZATION_CONFIG_MAIN
+
+#include <algorithm>
+#include <array>
+#include <cstring>
+#include <tuple>
+
+namespace {
+
+constexpr std::array<std::string_view, 35> vendors = {{
+  "IMG",
+  "AMD",
+  "AMDX",
+  "ARM",
+  "FSL",
+  "BRCM",
+  "NXP",
+  "NV",
+  "NVX",
+  "VIV",
+  "VSI",
+  "KDAB",
+  "ANDROID",
+  "CHROMIUM",
+  "FUCHSIA",
+  "GGP",
+  "GOOGLE",
+  "QCOM",
+  "LUNARG",
+  "SAMSUNG",
+  "SEC",
+  "TIZEN",
+  "RENDERDOC",
+  "NN",
+  "MVK",
+  "KHR",
+  "KHX",
+  "EXT",
+  "MESA",
+  "INTEL",
+  "HUAWEI",
+  "VALVE",
+  "QNX",
+  "JUICE",
+  "FB",
+}};
+
+struct EnumValueSet {
+    std::string_view name;
+    int32_t value;
+};
+constexpr EnumValueSet VkImageLayoutSets[] = {
+    {"UNDEFINED", 0},
+    {"GENERAL", 1},
+    {"COLOR_ATTACHMENT_OPTIMAL", 2},
+    {"DEPTH_STENCIL_ATTACHMENT_OPTIMAL", 3},
+    {"DEPTH_STENCIL_READ_ONLY_OPTIMAL", 4},
+    {"SHADER_READ_ONLY_OPTIMAL", 5},
+    {"TRANSFER_SRC_OPTIMAL", 6},
+    {"TRANSFER_DST_OPTIMAL", 7},
+    {"PREINITIALIZED", 8},
+};
+constexpr EnumValueSet VkAttachmentLoadOpSets[] = {
+    {"LOAD", 0},
+    {"CLEAR", 1},
+    {"DONT_CARE", 2},
+};
+constexpr EnumValueSet VkAttachmentStoreOpSets[] = {
+    {"STORE", 0},
+    {"DONT_CARE", 1},
+};
+constexpr EnumValueSet VkImageTypeSets[] = {
+    {"1D", 0},
+    {"2D", 1},
+    {"3D", 2},
+};
+constexpr EnumValueSet VkImageTilingSets[] = {
+    {"OPTIMAL", 0},
+    {"LINEAR", 1},
+};
+constexpr EnumValueSet VkImageViewTypeSets[] = {
+    {"1D", 0},
+    {"2D", 1},
+    {"3D", 2},
+    {"CUBE", 3},
+    {"1D_ARRAY", 4},
+    {"2D_ARRAY", 5},
+    {"CUBE_ARRAY", 6},
+};
+constexpr EnumValueSet VkCommandBufferLevelSets[] = {
+    {"PRIMARY", 0},
+    {"SECONDARY", 1},
+};
+constexpr EnumValueSet VkComponentSwizzleSets[] = {
+    {"IDENTITY", 0},
+    {"ZERO", 1},
+    {"ONE", 2},
+    {"R", 3},
+    {"G", 4},
+    {"B", 5},
+    {"A", 6},
+};
+constexpr EnumValueSet VkDescriptorTypeSets[] = {
+    {"SAMPLER", 0},
+    {"COMBINED_IMAGE_SAMPLER", 1},
+    {"SAMPLED_IMAGE", 2},
+    {"STORAGE_IMAGE", 3},
+    {"UNIFORM_TEXEL_BUFFER", 4},
+    {"STORAGE_TEXEL_BUFFER", 5},
+    {"UNIFORM_BUFFER", 6},
+    {"STORAGE_BUFFER", 7},
+    {"UNIFORM_BUFFER_DYNAMIC", 8},
+    {"STORAGE_BUFFER_DYNAMIC", 9},
+    {"INPUT_ATTACHMENT", 10},
+};
+constexpr EnumValueSet VkQueryTypeSets[] = {
+    {"OCCLUSION", 0},
+    {"PIPELINE_STATISTICS", 1},
+    {"TIMESTAMP", 2},
+};
+constexpr EnumValueSet VkBorderColorSets[] = {
+    {"FLOAT_TRANSPARENT_BLACK", 0},
+    {"INT_TRANSPARENT_BLACK", 1},
+    {"FLOAT_OPAQUE_BLACK", 2},
+    {"INT_OPAQUE_BLACK", 3},
+    {"FLOAT_OPAQUE_WHITE", 4},
+    {"INT_OPAQUE_WHITE", 5},
+};
+constexpr EnumValueSet VkPipelineBindPointSets[] = {
+    {"GRAPHICS", 0},
+    {"COMPUTE", 1},
+};
+constexpr EnumValueSet VkPipelineCacheHeaderVersionSets[] = {
+    {"ONE", 1},
+};
+constexpr EnumValueSet VkPrimitiveTopologySets[] = {
+    {"POINT_LIST", 0},
+    {"LINE_LIST", 1},
+    {"LINE_STRIP", 2},
+    {"TRIANGLE_LIST", 3},
+    {"TRIANGLE_STRIP", 4},
+    {"TRIANGLE_FAN", 5},
+    {"LINE_LIST_WITH_ADJACENCY", 6},
+    {"LINE_STRIP_WITH_ADJACENCY", 7},
+    {"TRIANGLE_LIST_WITH_ADJACENCY", 8},
+    {"TRIANGLE_STRIP_WITH_ADJACENCY", 9},
+    {"PATCH_LIST", 10},
+};
+constexpr EnumValueSet VkSharingModeSets[] = {
+    {"EXCLUSIVE", 0},
+    {"CONCURRENT", 1},
+};
+constexpr EnumValueSet VkIndexTypeSets[] = {
+    {"UINT16", 0},
+    {"UINT32", 1},
+};
+constexpr EnumValueSet VkFilterSets[] = {
+    {"NEAREST", 0},
+    {"LINEAR", 1},
+};
+constexpr EnumValueSet VkSamplerMipmapModeSets[] = {
+    {"NEAREST", 0},
+    {"LINEAR", 1},
+};
+constexpr EnumValueSet VkSamplerAddressModeSets[] = {
+    {"REPEAT", 0},
+    {"MIRRORED_REPEAT", 1},
+    {"CLAMP_TO_EDGE", 2},
+    {"CLAMP_TO_BORDER", 3},
+};
+constexpr EnumValueSet VkCompareOpSets[] = {
+    {"NEVER", 0},
+    {"LESS", 1},
+    {"EQUAL", 2},
+    {"LESS_OR_EQUAL", 3},
+    {"GREATER", 4},
+    {"NOT_EQUAL", 5},
+    {"GREATER_OR_EQUAL", 6},
+    {"ALWAYS", 7},
+};
+constexpr EnumValueSet VkPolygonModeSets[] = {
+    {"FILL", 0},
+    {"LINE", 1},
+    {"POINT", 2},
+};
+constexpr EnumValueSet VkFrontFaceSets[] = {
+    {"COUNTER_CLOCKWISE", 0},
+    {"CLOCKWISE", 1},
+};
+constexpr EnumValueSet VkBlendFactorSets[] = {
+    {"ZERO", 0},
+    {"ONE", 1},
+    {"SRC_COLOR", 2},
+    {"ONE_MINUS_SRC_COLOR", 3},
+    {"DST_COLOR", 4},
+    {"ONE_MINUS_DST_COLOR", 5},
+    {"SRC_ALPHA", 6},
+    {"ONE_MINUS_SRC_ALPHA", 7},
+    {"DST_ALPHA", 8},
+    {"ONE_MINUS_DST_ALPHA", 9},
+    {"CONSTANT_COLOR", 10},
+    {"ONE_MINUS_CONSTANT_COLOR", 11},
+    {"CONSTANT_ALPHA", 12},
+    {"ONE_MINUS_CONSTANT_ALPHA", 13},
+    {"SRC_ALPHA_SATURATE", 14},
+    {"SRC1_COLOR", 15},
+    {"ONE_MINUS_SRC1_COLOR", 16},
+    {"SRC1_ALPHA", 17},
+    {"ONE_MINUS_SRC1_ALPHA", 18},
+};
+constexpr EnumValueSet VkBlendOpSets[] = {
+    {"ADD", 0},
+    {"SUBTRACT", 1},
+    {"REVERSE_SUBTRACT", 2},
+    {"MIN", 3},
+    {"MAX", 4},
+};
+constexpr EnumValueSet VkStencilOpSets[] = {
+    {"KEEP", 0},
+    {"ZERO", 1},
+    {"REPLACE", 2},
+    {"INCREMENT_AND_CLAMP", 3},
+    {"DECREMENT_AND_CLAMP", 4},
+    {"INVERT", 5},
+    {"INCREMENT_AND_WRAP", 6},
+    {"DECREMENT_AND_WRAP", 7},
+};
+constexpr EnumValueSet VkLogicOpSets[] = {
+    {"CLEAR", 0},
+    {"AND", 1},
+    {"AND_REVERSE", 2},
+    {"COPY", 3},
+    {"AND_INVERTED", 4},
+    {"NO_OP", 5},
+    {"XOR", 6},
+    {"OR", 7},
+    {"NOR", 8},
+    {"EQUIVALENT", 9},
+    {"INVERT", 10},
+    {"OR_REVERSE", 11},
+    {"COPY_INVERTED", 12},
+    {"OR_INVERTED", 13},
+    {"NAND", 14},
+    {"SET", 15},
+};
+constexpr EnumValueSet VkInternalAllocationTypeSets[] = {
+    {"EXECUTABLE", 0},
+};
+constexpr EnumValueSet VkSystemAllocationScopeSets[] = {
+    {"COMMAND", 0},
+    {"OBJECT", 1},
+    {"CACHE", 2},
+    {"DEVICE", 3},
+    {"INSTANCE", 4},
+};
+constexpr EnumValueSet VkPhysicalDeviceTypeSets[] = {
+    {"OTHER", 0},
+    {"INTEGRATED_GPU", 1},
+    {"DISCRETE_GPU", 2},
+    {"VIRTUAL_GPU", 3},
+    {"CPU", 4},
+};
+constexpr EnumValueSet VkVertexInputRateSets[] = {
+    {"VERTEX", 0},
+    {"INSTANCE", 1},
+};
+constexpr EnumValueSet VkFormatSets[] = {
+    {"UNDEFINED", 0},
+    {"R4G4_UNORM_PACK8", 1},
+    {"R4G4B4A4_UNORM_PACK16", 2},
+    {"B4G4R4A4_UNORM_PACK16", 3},
+    {"R5G6B5_UNORM_PACK16", 4},
+    {"B5G6R5_UNORM_PACK16", 5},
+    {"R5G5B5A1_UNORM_PACK16", 6},
+    {"B5G5R5A1_UNORM_PACK16", 7},
+    {"A1R5G5B5_UNORM_PACK16", 8},
+    {"R8_UNORM", 9},
+    {"R8_SNORM", 10},
+    {"R8_USCALED", 11},
+    {"R8_SSCALED", 12},
+    {"R8_UINT", 13},
+    {"R8_SINT", 14},
+    {"R8_SRGB", 15},
+    {"R8G8_UNORM", 16},
+    {"R8G8_SNORM", 17},
+    {"R8G8_USCALED", 18},
+    {"R8G8_SSCALED", 19},
+    {"R8G8_UINT", 20},
+    {"R8G8_SINT", 21},
+    {"R8G8_SRGB", 22},
+    {"R8G8B8_UNORM", 23},
+    {"R8G8B8_SNORM", 24},
+    {"R8G8B8_USCALED", 25},
+    {"R8G8B8_SSCALED", 26},
+    {"R8G8B8_UINT", 27},
+    {"R8G8B8_SINT", 28},
+    {"R8G8B8_SRGB", 29},
+    {"B8G8R8_UNORM", 30},
+    {"B8G8R8_SNORM", 31},
+    {"B8G8R8_USCALED", 32},
+    {"B8G8R8_SSCALED", 33},
+    {"B8G8R8_UINT", 34},
+    {"B8G8R8_SINT", 35},
+    {"B8G8R8_SRGB", 36},
+    {"R8G8B8A8_UNORM", 37},
+    {"R8G8B8A8_SNORM", 38},
+    {"R8G8B8A8_USCALED", 39},
+    {"R8G8B8A8_SSCALED", 40},
+    {"R8G8B8A8_UINT", 41},
+    {"R8G8B8A8_SINT", 42},
+    {"R8G8B8A8_SRGB", 43},
+    {"B8G8R8A8_UNORM", 44},
+    {"B8G8R8A8_SNORM", 45},
+    {"B8G8R8A8_USCALED", 46},
+    {"B8G8R8A8_SSCALED", 47},
+    {"B8G8R8A8_UINT", 48},
+    {"B8G8R8A8_SINT", 49},
+    {"B8G8R8A8_SRGB", 50},
+    {"A8B8G8R8_UNORM_PACK32", 51},
+    {"A8B8G8R8_SNORM_PACK32", 52},
+    {"A8B8G8R8_USCALED_PACK32", 53},
+    {"A8B8G8R8_SSCALED_PACK32", 54},
+    {"A8B8G8R8_UINT_PACK32", 55},
+    {"A8B8G8R8_SINT_PACK32", 56},
+    {"A8B8G8R8_SRGB_PACK32", 57},
+    {"A2R10G10B10_UNORM_PACK32", 58},
+    {"A2R10G10B10_SNORM_PACK32", 59},
+    {"A2R10G10B10_USCALED_PACK32", 60},
+    {"A2R10G10B10_SSCALED_PACK32", 61},
+    {"A2R10G10B10_UINT_PACK32", 62},
+    {"A2R10G10B10_SINT_PACK32", 63},
+    {"A2B10G10R10_UNORM_PACK32", 64},
+    {"A2B10G10R10_SNORM_PACK32", 65},
+    {"A2B10G10R10_USCALED_PACK32", 66},
+    {"A2B10G10R10_SSCALED_PACK32", 67},
+    {"A2B10G10R10_UINT_PACK32", 68},
+    {"A2B10G10R10_SINT_PACK32", 69},
+    {"R16_UNORM", 70},
+    {"R16_SNORM", 71},
+    {"R16_USCALED", 72},
+    {"R16_SSCALED", 73},
+    {"R16_UINT", 74},
+    {"R16_SINT", 75},
+    {"R16_SFLOAT", 76},
+    {"R16G16_UNORM", 77},
+    {"R16G16_SNORM", 78},
+    {"R16G16_USCALED", 79},
+    {"R16G16_SSCALED", 80},
+    {"R16G16_UINT", 81},
+    {"R16G16_SINT", 82},
+    {"R16G16_SFLOAT", 83},
+    {"R16G16B16_UNORM", 84},
+    {"R16G16B16_SNORM", 85},
+    {"R16G16B16_USCALED", 86},
+    {"R16G16B16_SSCALED", 87},
+    {"R16G16B16_UINT", 88},
+    {"R16G16B16_SINT", 89},
+    {"R16G16B16_SFLOAT", 90},
+    {"R16G16B16A16_UNORM", 91},
+    {"R16G16B16A16_SNORM", 92},
+    {"R16G16B16A16_USCALED", 93},
+    {"R16G16B16A16_SSCALED", 94},
+    {"R16G16B16A16_UINT", 95},
+    {"R16G16B16A16_SINT", 96},
+    {"R16G16B16A16_SFLOAT", 97},
+    {"R32_UINT", 98},
+    {"R32_SINT", 99},
+    {"R32_SFLOAT", 100},
+    {"R32G32_UINT", 101},
+    {"R32G32_SINT", 102},
+    {"R32G32_SFLOAT", 103},
+    {"R32G32B32_UINT", 104},
+    {"R32G32B32_SINT", 105},
+    {"R32G32B32_SFLOAT", 106},
+    {"R32G32B32A32_UINT", 107},
+    {"R32G32B32A32_SINT", 108},
+    {"R32G32B32A32_SFLOAT", 109},
+    {"R64_UINT", 110},
+    {"R64_SINT", 111},
+    {"R64_SFLOAT", 112},
+    {"R64G64_UINT", 113},
+    {"R64G64_SINT", 114},
+    {"R64G64_SFLOAT", 115},
+    {"R64G64B64_UINT", 116},
+    {"R64G64B64_SINT", 117},
+    {"R64G64B64_SFLOAT", 118},
+    {"R64G64B64A64_UINT", 119},
+    {"R64G64B64A64_SINT", 120},
+    {"R64G64B64A64_SFLOAT", 121},
+    {"B10G11R11_UFLOAT_PACK32", 122},
+    {"E5B9G9R9_UFLOAT_PACK32", 123},
+    {"D16_UNORM", 124},
+    {"X8_D24_UNORM_PACK32", 125},
+    {"D32_SFLOAT", 126},
+    {"S8_UINT", 127},
+    {"D16_UNORM_S8_UINT", 128},
+    {"D24_UNORM_S8_UINT", 129},
+    {"D32_SFLOAT_S8_UINT", 130},
+    {"BC1_RGB_UNORM_BLOCK", 131},
+    {"BC1_RGB_SRGB_BLOCK", 132},
+    {"BC1_RGBA_UNORM_BLOCK", 133},
+    {"BC1_RGBA_SRGB_BLOCK", 134},
+    {"BC2_UNORM_BLOCK", 135},
+    {"BC2_SRGB_BLOCK", 136},
+    {"BC3_UNORM_BLOCK", 137},
+    {"BC3_SRGB_BLOCK", 138},
+    {"BC4_UNORM_BLOCK", 139},
+    {"BC4_SNORM_BLOCK", 140},
+    {"BC5_UNORM_BLOCK", 141},
+    {"BC5_SNORM_BLOCK", 142},
+    {"BC6H_UFLOAT_BLOCK", 143},
+    {"BC6H_SFLOAT_BLOCK", 144},
+    {"BC7_UNORM_BLOCK", 145},
+    {"BC7_SRGB_BLOCK", 146},
+    {"ETC2_R8G8B8_UNORM_BLOCK", 147},
+    {"ETC2_R8G8B8_SRGB_BLOCK", 148},
+    {"ETC2_R8G8B8A1_UNORM_BLOCK", 149},
+    {"ETC2_R8G8B8A1_SRGB_BLOCK", 150},
+    {"ETC2_R8G8B8A8_UNORM_BLOCK", 151},
+    {"ETC2_R8G8B8A8_SRGB_BLOCK", 152},
+    {"EAC_R11_UNORM_BLOCK", 153},
+    {"EAC_R11_SNORM_BLOCK", 154},
+    {"EAC_R11G11_UNORM_BLOCK", 155},
+    {"EAC_R11G11_SNORM_BLOCK", 156},
+    {"ASTC_4x4_UNORM_BLOCK", 157},
+    {"ASTC_4x4_SRGB_BLOCK", 158},
+    {"ASTC_5x4_UNORM_BLOCK", 159},
+    {"ASTC_5x4_SRGB_BLOCK", 160},
+    {"ASTC_5x5_UNORM_BLOCK", 161},
+    {"ASTC_5x5_SRGB_BLOCK", 162},
+    {"ASTC_6x5_UNORM_BLOCK", 163},
+    {"ASTC_6x5_SRGB_BLOCK", 164},
+    {"ASTC_6x6_UNORM_BLOCK", 165},
+    {"ASTC_6x6_SRGB_BLOCK", 166},
+    {"ASTC_8x5_UNORM_BLOCK", 167},
+    {"ASTC_8x5_SRGB_BLOCK", 168},
+    {"ASTC_8x6_UNORM_BLOCK", 169},
+    {"ASTC_8x6_SRGB_BLOCK", 170},
+    {"ASTC_8x8_UNORM_BLOCK", 171},
+    {"ASTC_8x8_SRGB_BLOCK", 172},
+    {"ASTC_10x5_UNORM_BLOCK", 173},
+    {"ASTC_10x5_SRGB_BLOCK", 174},
+    {"ASTC_10x6_UNORM_BLOCK", 175},
+    {"ASTC_10x6_SRGB_BLOCK", 176},
+    {"ASTC_10x8_UNORM_BLOCK", 177},
+    {"ASTC_10x8_SRGB_BLOCK", 178},
+    {"ASTC_10x10_UNORM_BLOCK", 179},
+    {"ASTC_10x10_SRGB_BLOCK", 180},
+    {"ASTC_12x10_UNORM_BLOCK", 181},
+    {"ASTC_12x10_SRGB_BLOCK", 182},
+    {"ASTC_12x12_UNORM_BLOCK", 183},
+    {"ASTC_12x12_SRGB_BLOCK", 184},
+};
+constexpr EnumValueSet VkStructureTypeSets[] = {
+    {"APPLICATION_INFO", 0},
+    {"INSTANCE_CREATE_INFO", 1},
+    {"DEVICE_QUEUE_CREATE_INFO", 2},
+    {"DEVICE_CREATE_INFO", 3},
+    {"SUBMIT_INFO", 4},
+    {"MEMORY_ALLOCATE_INFO", 5},
+    {"MAPPED_MEMORY_RANGE", 6},
+    {"BIND_SPARSE_INFO", 7},
+    {"FENCE_CREATE_INFO", 8},
+    {"SEMAPHORE_CREATE_INFO", 9},
+    {"EVENT_CREATE_INFO", 10},
+    {"QUERY_POOL_CREATE_INFO", 11},
+    {"BUFFER_CREATE_INFO", 12},
+    {"BUFFER_VIEW_CREATE_INFO", 13},
+    {"IMAGE_CREATE_INFO", 14},
+    {"IMAGE_VIEW_CREATE_INFO", 15},
+    {"SHADER_MODULE_CREATE_INFO", 16},
+    {"PIPELINE_CACHE_CREATE_INFO", 17},
+    {"PIPELINE_SHADER_STAGE_CREATE_INFO", 18},
+    {"PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO", 19},
+    {"PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO", 20},
+    {"PIPELINE_TESSELLATION_STATE_CREATE_INFO", 21},
+    {"PIPELINE_VIEWPORT_STATE_CREATE_INFO", 22},
+    {"PIPELINE_RASTERIZATION_STATE_CREATE_INFO", 23},
+    {"PIPELINE_MULTISAMPLE_STATE_CREATE_INFO", 24},
+    {"PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO", 25},
+    {"PIPELINE_COLOR_BLEND_STATE_CREATE_INFO", 26},
+    {"PIPELINE_DYNAMIC_STATE_CREATE_INFO", 27},
+    {"GRAPHICS_PIPELINE_CREATE_INFO", 28},
+    {"COMPUTE_PIPELINE_CREATE_INFO", 29},
+    {"PIPELINE_LAYOUT_CREATE_INFO", 30},
+    {"SAMPLER_CREATE_INFO", 31},
+    {"DESCRIPTOR_SET_LAYOUT_CREATE_INFO", 32},
+    {"DESCRIPTOR_POOL_CREATE_INFO", 33},
+    {"DESCRIPTOR_SET_ALLOCATE_INFO", 34},
+    {"WRITE_DESCRIPTOR_SET", 35},
+    {"COPY_DESCRIPTOR_SET", 36},
+    {"FRAMEBUFFER_CREATE_INFO", 37},
+    {"RENDER_PASS_CREATE_INFO", 38},
+    {"COMMAND_POOL_CREATE_INFO", 39},
+    {"COMMAND_BUFFER_ALLOCATE_INFO", 40},
+    {"COMMAND_BUFFER_INHERITANCE_INFO", 41},
+    {"COMMAND_BUFFER_BEGIN_INFO", 42},
+    {"RENDER_PASS_BEGIN_INFO", 43},
+    {"BUFFER_MEMORY_BARRIER", 44},
+    {"IMAGE_MEMORY_BARRIER", 45},
+    {"MEMORY_BARRIER", 46},
+    {"LOADER_INSTANCE_CREATE_INFO", 47},
+    {"LOADER_DEVICE_CREATE_INFO", 48},
+};
+constexpr EnumValueSet VkSubpassContentsSets[] = {
+    {"INLINE", 0},
+    {"SECONDARY_COMMAND_BUFFERS", 1},
+};
+constexpr EnumValueSet VkDynamicStateSets[] = {
+    {"VIEWPORT", 0},
+    {"SCISSOR", 1},
+    {"LINE_WIDTH", 2},
+    {"DEPTH_BIAS", 3},
+    {"BLEND_CONSTANTS", 4},
+    {"DEPTH_BOUNDS", 5},
+    {"STENCIL_COMPARE_MASK", 6},
+    {"STENCIL_WRITE_MASK", 7},
+    {"STENCIL_REFERENCE", 8},
+};
+constexpr EnumValueSet VkDescriptorUpdateTemplateTypeSets[] = {
+    {"DESCRIPTOR_SET", 0},
+};
+constexpr EnumValueSet VkObjectTypeSets[] = {
+    {"UNKNOWN", 0},
+    {"INSTANCE", 1},
+    {"PHYSICAL_DEVICE", 2},
+    {"DEVICE", 3},
+    {"QUEUE", 4},
+    {"SEMAPHORE", 5},
+    {"COMMAND_BUFFER", 6},
+    {"FENCE", 7},
+    {"DEVICE_MEMORY", 8},
+    {"BUFFER", 9},
+    {"IMAGE", 10},
+    {"EVENT", 11},
+    {"QUERY_POOL", 12},
+    {"BUFFER_VIEW", 13},
+    {"IMAGE_VIEW", 14},
+    {"SHADER_MODULE", 15},
+    {"PIPELINE_CACHE", 16},
+    {"PIPELINE_LAYOUT", 17},
+    {"RENDER_PASS", 18},
+    {"PIPELINE", 19},
+    {"DESCRIPTOR_SET_LAYOUT", 20},
+    {"SAMPLER", 21},
+    {"DESCRIPTOR_POOL", 22},
+    {"DESCRIPTOR_SET", 23},
+    {"FRAMEBUFFER", 24},
+    {"COMMAND_POOL", 25},
+};
+constexpr EnumValueSet VkQueueFlagBitsSets[] = {
+    {"GRAPHICS", 0x00000001},
+    {"COMPUTE", 0x00000002},
+    {"TRANSFER", 0x00000004},
+    {"SPARSE_BINDING", 0x00000008},
+};
+constexpr EnumValueSet VkCullModeFlagBitsSets[] = {
+    {"NONE", 0},
+    {"FRONT", 0x00000001},
+    {"BACK", 0x00000002},
+    {"FRONT_AND_BACK", 0x00000003},
+};
+constexpr EnumValueSet VkMemoryPropertyFlagBitsSets[] = {
+    {"DEVICE_LOCAL", 0x00000001},
+    {"HOST_VISIBLE", 0x00000002},
+    {"HOST_COHERENT", 0x00000004},
+    {"HOST_CACHED", 0x00000008},
+    {"LAZILY_ALLOCATED", 0x00000010},
+};
+constexpr EnumValueSet VkMemoryHeapFlagBitsSets[] = {
+    {"DEVICE_LOCAL", 0x00000001},
+};
+constexpr EnumValueSet VkAccessFlagBitsSets[] = {
+    {"INDIRECT_COMMAND_READ", 0x00000001},
+    {"INDEX_READ", 0x00000002},
+    {"VERTEX_ATTRIBUTE_READ", 0x00000004},
+    {"UNIFORM_READ", 0x00000008},
+    {"INPUT_ATTACHMENT_READ", 0x00000010},
+    {"SHADER_READ", 0x00000020},
+    {"SHADER_WRITE", 0x00000040},
+    {"COLOR_ATTACHMENT_READ", 0x00000080},
+    {"COLOR_ATTACHMENT_WRITE", 0x00000100},
+    {"DEPTH_STENCIL_ATTACHMENT_READ", 0x00000200},
+    {"DEPTH_STENCIL_ATTACHMENT_WRITE", 0x00000400},
+    {"TRANSFER_READ", 0x00000800},
+    {"TRANSFER_WRITE", 0x00001000},
+    {"HOST_READ", 0x00002000},
+    {"HOST_WRITE", 0x00004000},
+    {"MEMORY_READ", 0x00008000},
+    {"MEMORY_WRITE", 0x00010000},
+};
+constexpr EnumValueSet VkBufferUsageFlagBitsSets[] = {
+    {"TRANSFER_SRC", 0x00000001},
+    {"TRANSFER_DST", 0x00000002},
+    {"UNIFORM_TEXEL_BUFFER", 0x00000004},
+    {"STORAGE_TEXEL_BUFFER", 0x00000008},
+    {"UNIFORM_BUFFER", 0x00000010},
+    {"STORAGE_BUFFER", 0x00000020},
+    {"INDEX_BUFFER", 0x00000040},
+    {"VERTEX_BUFFER", 0x00000080},
+    {"INDIRECT_BUFFER", 0x00000100},
+};
+constexpr EnumValueSet VkBufferCreateFlagBitsSets[] = {
+    {"SPARSE_BINDING", 0x00000001},
+    {"SPARSE_RESIDENCY", 0x00000002},
+    {"SPARSE_ALIASED", 0x00000004},
+};
+constexpr EnumValueSet VkShaderStageFlagBitsSets[] = {
+    {"VERTEX", 0x00000001},
+    {"TESSELLATION_CONTROL", 0x00000002},
+    {"TESSELLATION_EVALUATION", 0x00000004},
+    {"GEOMETRY", 0x00000008},
+    {"FRAGMENT", 0x00000010},
+    {"COMPUTE", 0x00000020},
+    {"ALL_GRAPHICS", 0x0000001F},
+    {"ALL", 0x7FFFFFFF},
+};
+constexpr EnumValueSet VkImageUsageFlagBitsSets[] = {
+    {"TRANSFER_SRC", 0x00000001},
+    {"TRANSFER_DST", 0x00000002},
+    {"SAMPLED", 0x00000004},
+    {"STORAGE", 0x00000008},
+    {"COLOR_ATTACHMENT", 0x00000010},
+    {"DEPTH_STENCIL_ATTACHMENT", 0x00000020},
+    {"TRANSIENT_ATTACHMENT", 0x00000040},
+    {"INPUT_ATTACHMENT", 0x00000080},
+};
+constexpr EnumValueSet VkImageCreateFlagBitsSets[] = {
+    {"SPARSE_BINDING", 0x00000001},
+    {"SPARSE_RESIDENCY", 0x00000002},
+    {"SPARSE_ALIASED", 0x00000004},
+    {"MUTABLE_FORMAT", 0x00000008},
+    {"CUBE_COMPATIBLE", 0x00000010},
+};
+constexpr EnumValueSet VkPipelineCreateFlagBitsSets[] = {
+    {"DISABLE_OPTIMIZATION", 0x00000001},
+    {"ALLOW_DERIVATIVES", 0x00000002},
+    {"DERIVATIVE", 0x00000004},
+};
+constexpr EnumValueSet VkColorComponentFlagBitsSets[] = {
+    {"R", 0x00000001},
+    {"G", 0x00000002},
+    {"B", 0x00000004},
+    {"A", 0x00000008},
+};
+constexpr EnumValueSet VkFenceCreateFlagBitsSets[] = {
+    {"SIGNALED", 0x00000001},
+};
+constexpr EnumValueSet VkFormatFeatureFlagBitsSets[] = {
+    {"SAMPLED_IMAGE", 0x00000001},
+    {"STORAGE_IMAGE", 0x00000002},
+    {"STORAGE_IMAGE_ATOMIC", 0x00000004},
+    {"UNIFORM_TEXEL_BUFFER", 0x00000008},
+    {"STORAGE_TEXEL_BUFFER", 0x00000010},
+    {"STORAGE_TEXEL_BUFFER_ATOMIC", 0x00000020},
+    {"VERTEX_BUFFER", 0x00000040},
+    {"COLOR_ATTACHMENT", 0x00000080},
+    {"COLOR_ATTACHMENT_BLEND", 0x00000100},
+    {"DEPTH_STENCIL_ATTACHMENT", 0x00000200},
+    {"BLIT_SRC", 0x00000400},
+    {"BLIT_DST", 0x00000800},
+    {"SAMPLED_IMAGE_FILTER_LINEAR", 0x00001000},
+};
+constexpr EnumValueSet VkQueryControlFlagBitsSets[] = {
+    {"PRECISE", 0x00000001},
+};
+constexpr EnumValueSet VkQueryResultFlagBitsSets[] = {
+    {"64", 0x00000001},
+    {"WAIT", 0x00000002},
+    {"WITH_AVAILABILITY", 0x00000004},
+    {"PARTIAL", 0x00000008},
+};
+constexpr EnumValueSet VkCommandBufferUsageFlagBitsSets[] = {
+    {"ONE_TIME_SUBMIT", 0x00000001},
+    {"RENDER_PASS_CONTINUE", 0x00000002},
+    {"SIMULTANEOUS_USE", 0x00000004},
+};
+constexpr EnumValueSet VkQueryPipelineStatisticFlagBitsSets[] = {
+    {"INPUT_ASSEMBLY_VERTICES", 0x00000001},
+    {"INPUT_ASSEMBLY_PRIMITIVES", 0x00000002},
+    {"VERTEX_SHADER_INVOCATIONS", 0x00000004},
+    {"GEOMETRY_SHADER_INVOCATIONS", 0x00000008},
+    {"GEOMETRY_SHADER_PRIMITIVES", 0x00000010},
+    {"CLIPPING_INVOCATIONS", 0x00000020},
+    {"CLIPPING_PRIMITIVES", 0x00000040},
+    {"FRAGMENT_SHADER_INVOCATIONS", 0x00000080},
+    {"TESSELLATION_CONTROL_SHADER_PATCHES", 0x00000100},
+    {"TESSELLATION_EVALUATION_SHADER_INVOCATIONS", 0x00000200},
+    {"COMPUTE_SHADER_INVOCATIONS", 0x00000400},
+};
+constexpr EnumValueSet VkImageAspectFlagBitsSets[] = {
+    {"COLOR", 0x00000001},
+    {"DEPTH", 0x00000002},
+    {"STENCIL", 0x00000004},
+    {"METADATA", 0x00000008},
+};
+constexpr EnumValueSet VkSparseImageFormatFlagBitsSets[] = {
+    {"SINGLE_MIPTAIL", 0x00000001},
+    {"ALIGNED_MIP_SIZE", 0x00000002},
+    {"NONSTANDARD_BLOCK_SIZE", 0x00000004},
+};
+constexpr EnumValueSet VkSparseMemoryBindFlagBitsSets[] = {
+    {"METADATA", 0x00000001},
+};
+constexpr EnumValueSet VkPipelineStageFlagBitsSets[] = {
+    {"TOP_OF_PIPE", 0x00000001},
+    {"DRAW_INDIRECT", 0x00000002},
+    {"VERTEX_INPUT", 0x00000004},
+    {"VERTEX_SHADER", 0x00000008},
+    {"TESSELLATION_CONTROL_SHADER", 0x00000010},
+    {"TESSELLATION_EVALUATION_SHADER", 0x00000020},
+    {"GEOMETRY_SHADER", 0x00000040},
+    {"FRAGMENT_SHADER", 0x00000080},
+    {"EARLY_FRAGMENT_TESTS", 0x00000100},
+    {"LATE_FRAGMENT_TESTS", 0x00000200},
+    {"COLOR_ATTACHMENT_OUTPUT", 0x00000400},
+    {"COMPUTE_SHADER", 0x00000800},
+    {"TRANSFER", 0x00001000},
+    {"BOTTOM_OF_PIPE", 0x00002000},
+    {"HOST", 0x00004000},
+    {"ALL_GRAPHICS", 0x00008000},
+    {"ALL_COMMANDS", 0x00010000},
+};
+constexpr EnumValueSet VkCommandPoolCreateFlagBitsSets[] = {
+    {"TRANSIENT", 0x00000001},
+    {"RESET_COMMAND_BUFFER", 0x00000002},
+};
+constexpr EnumValueSet VkCommandPoolResetFlagBitsSets[] = {
+    {"RELEASE_RESOURCES", 0x00000001},
+};
+constexpr EnumValueSet VkCommandBufferResetFlagBitsSets[] = {
+    {"RELEASE_RESOURCES", 0x00000001},
+};
+constexpr EnumValueSet VkSampleCountFlagBitsSets[] = {
+    {"1", 0x00000001},
+    {"2", 0x00000002},
+    {"4", 0x00000004},
+    {"8", 0x00000008},
+    {"16", 0x00000010},
+    {"32", 0x00000020},
+    {"64", 0x00000040},
+};
+constexpr EnumValueSet VkAttachmentDescriptionFlagBitsSets[] = {
+    {"MAY_ALIAS", 0x00000001},
+};
+constexpr EnumValueSet VkStencilFaceFlagBitsSets[] = {
+    {"FRONT", 0x00000001},
+    {"BACK", 0x00000002},
+    {"FRONT_AND_BACK", 0x00000003},
+    {"VK_STENCIL_FRONT_AND_BACK", 0x00000003},
+};
+constexpr EnumValueSet VkDescriptorPoolCreateFlagBitsSets[] = {
+    {"FREE_DESCRIPTOR_SET", 0x00000001},
+};
+constexpr EnumValueSet VkDependencyFlagBitsSets[] = {
+    {"BY_REGION", 0x00000001},
+};
+constexpr EnumValueSet VkSemaphoreTypeSets[] = {
+    {"BINARY", 0},
+    {"TIMELINE", 1},
+};
+constexpr EnumValueSet VkSemaphoreWaitFlagBitsSets[] = {
+    {"ANY", 0x00000001},
+};
+constexpr EnumValueSet VkPresentModeKHRSets[] = {
+    {"IMMEDIATE", 0},
+    {"MAILBOX", 1},
+    {"FIFO", 2},
+    {"FIFO_RELAXED", 3},
+};
+constexpr EnumValueSet VkColorSpaceKHRSets[] = {
+    {"SRGB_NONLINEAR", 0},
+    {"VK_COLORSPACE_SRGB_NONLINEAR", 0},
+};
+constexpr EnumValueSet VkDisplayPlaneAlphaFlagBitsKHRSets[] = {
+    {"OPAQUE", 0x00000001},
+    {"GLOBAL", 0x00000002},
+    {"PER_PIXEL", 0x00000004},
+    {"PER_PIXEL_PREMULTIPLIED", 0x00000008},
+};
+constexpr EnumValueSet VkCompositeAlphaFlagBitsKHRSets[] = {
+    {"OPAQUE", 0x00000001},
+    {"PRE_MULTIPLIED", 0x00000002},
+    {"POST_MULTIPLIED", 0x00000004},
+    {"INHERIT", 0x00000008},
+};
+constexpr EnumValueSet VkSurfaceTransformFlagBitsKHRSets[] = {
+    {"IDENTITY", 0x00000001},
+    {"ROTATE_90", 0x00000002},
+    {"ROTATE_180", 0x00000004},
+    {"ROTATE_270", 0x00000008},
+    {"HORIZONTAL_MIRROR", 0x00000010},
+    {"HORIZONTAL_MIRROR_ROTATE_90", 0x00000020},
+    {"HORIZONTAL_MIRROR_ROTATE_180", 0x00000040},
+    {"HORIZONTAL_MIRROR_ROTATE_270", 0x00000080},
+    {"INHERIT", 0x00000100},
+};
+constexpr EnumValueSet VkSwapchainImageUsageFlagBitsANDROIDSets[] = {
+    {"SHARED", 0x00000001},
+};
+constexpr EnumValueSet VkTimeDomainEXTSets[] = {
+    {"DEVICE", 0},
+    {"CLOCK_MONOTONIC", 1},
+    {"CLOCK_MONOTONIC_RAW", 2},
+    {"QUERY_PERFORMANCE_COUNTER", 3},
+};
+constexpr EnumValueSet VkDebugReportFlagBitsEXTSets[] = {
+    {"INFORMATION", 0x00000001},
+    {"WARNING", 0x00000002},
+    {"PERFORMANCE_WARNING", 0x00000004},
+    {"ERROR", 0x00000008},
+    {"DEBUG", 0x00000010},
+};
+constexpr EnumValueSet VkDebugReportObjectTypeEXTSets[] = {
+    {"UNKNOWN", 0},
+    {"INSTANCE", 1},
+    {"PHYSICAL_DEVICE", 2},
+    {"DEVICE", 3},
+    {"QUEUE", 4},
+    {"SEMAPHORE", 5},
+    {"COMMAND_BUFFER", 6},
+    {"FENCE", 7},
+    {"DEVICE_MEMORY", 8},
+    {"BUFFER", 9},
+    {"IMAGE", 10},
+    {"EVENT", 11},
+    {"QUERY_POOL", 12},
+    {"BUFFER_VIEW", 13},
+    {"IMAGE_VIEW", 14},
+    {"SHADER_MODULE", 15},
+    {"PIPELINE_CACHE", 16},
+    {"PIPELINE_LAYOUT", 17},
+    {"RENDER_PASS", 18},
+    {"PIPELINE", 19},
+    {"DESCRIPTOR_SET_LAYOUT", 20},
+    {"SAMPLER", 21},
+    {"DESCRIPTOR_POOL", 22},
+    {"DESCRIPTOR_SET", 23},
+    {"FRAMEBUFFER", 24},
+    {"COMMAND_POOL", 25},
+    {"SURFACE_KHR", 26},
+    {"SWAPCHAIN_KHR", 27},
+    {"DEBUG_REPORT_CALLBACK_EXT", 28},
+    {"DEBUG_REPORT", 28},
+    {"DISPLAY_KHR", 29},
+    {"DISPLAY_MODE_KHR", 30},
+    {"VALIDATION_CACHE_EXT", 33},
+    {"VALIDATION_CACHE", 33},
+};
+constexpr EnumValueSet VkDeviceMemoryReportEventTypeEXTSets[] = {
+    {"ALLOCATE", 0},
+    {"FREE", 1},
+    {"IMPORT", 2},
+    {"UNIMPORT", 3},
+    {"ALLOCATION_FAILED", 4},
+};
+constexpr EnumValueSet VkRasterizationOrderAMDSets[] = {
+    {"STRICT", 0},
+    {"RELAXED", 1},
+};
+constexpr EnumValueSet VkExternalMemoryHandleTypeFlagBitsNVSets[] = {
+    {"OPAQUE_WIN32", 0x00000001},
+    {"OPAQUE_WIN32_KMT", 0x00000002},
+    {"D3D11_IMAGE", 0x00000004},
+    {"D3D11_IMAGE_KMT", 0x00000008},
+};
+constexpr EnumValueSet VkExternalMemoryFeatureFlagBitsNVSets[] = {
+    {"DEDICATED_ONLY", 0x00000001},
+    {"EXPORTABLE", 0x00000002},
+    {"IMPORTABLE", 0x00000004},
+};
+constexpr EnumValueSet VkValidationCheckEXTSets[] = {
+    {"ALL", 0},
+    {"SHADERS", 1},
+};
+constexpr EnumValueSet VkValidationFeatureEnableEXTSets[] = {
+    {"GPU_ASSISTED", 0},
+    {"GPU_ASSISTED_RESERVE_BINDING_SLOT", 1},
+    {"BEST_PRACTICES", 2},
+    {"DEBUG_PRINTF", 3},
+    {"SYNCHRONIZATION_VALIDATION", 4},
+};
+constexpr EnumValueSet VkValidationFeatureDisableEXTSets[] = {
+    {"ALL", 0},
+    {"SHADERS", 1},
+    {"THREAD_SAFETY", 2},
+    {"API_PARAMETERS", 3},
+    {"OBJECT_LIFETIMES", 4},
+    {"CORE_CHECKS", 5},
+    {"UNIQUE_HANDLES", 6},
+    {"SHADER_VALIDATION_CACHE", 7},
+};
+constexpr EnumValueSet VkSubgroupFeatureFlagBitsSets[] = {
+    {"BASIC", 0x00000001},
+    {"VOTE", 0x00000002},
+    {"ARITHMETIC", 0x00000004},
+    {"BALLOT", 0x00000008},
+    {"SHUFFLE", 0x00000010},
+    {"SHUFFLE_RELATIVE", 0x00000020},
+    {"CLUSTERED", 0x00000040},
+    {"QUAD", 0x00000080},
+};
+constexpr EnumValueSet VkIndirectCommandsLayoutUsageFlagBitsNVSets[] = {
+    {"EXPLICIT_PREPROCESS", 0x00000001},
+    {"INDEXED_SEQUENCES", 0x00000002},
+    {"UNORDERED_SEQUENCES", 0x00000004},
+};
+constexpr EnumValueSet VkIndirectStateFlagBitsNVSets[] = {
+    {"FLAG_FRONTFACE", 0x00000001},
+};
+constexpr EnumValueSet VkIndirectCommandsTokenTypeNVSets[] = {
+    {"SHADER_GROUP", 0},
+    {"STATE_FLAGS", 1},
+    {"INDEX_BUFFER", 2},
+    {"VERTEX_BUFFER", 3},
+    {"PUSH_CONSTANT", 4},
+    {"DRAW_INDEXED", 5},
+    {"DRAW", 6},
+    {"DRAW_TASKS", 7},
+};
+constexpr EnumValueSet VkExternalMemoryHandleTypeFlagBitsSets[] = {
+    {"OPAQUE_FD", 0x00000001},
+    {"OPAQUE_WIN32", 0x00000002},
+    {"OPAQUE_WIN32_KMT", 0x00000004},
+    {"D3D11_TEXTURE", 0x00000008},
+    {"D3D11_TEXTURE_KMT", 0x00000010},
+    {"D3D12_HEAP", 0x00000020},
+    {"D3D12_RESOURCE", 0x00000040},
+};
+constexpr EnumValueSet VkExternalMemoryFeatureFlagBitsSets[] = {
+    {"DEDICATED_ONLY", 0x00000001},
+    {"EXPORTABLE", 0x00000002},
+    {"IMPORTABLE", 0x00000004},
+};
+constexpr EnumValueSet VkExternalSemaphoreHandleTypeFlagBitsSets[] = {
+    {"OPAQUE_FD", 0x00000001},
+    {"OPAQUE_WIN32", 0x00000002},
+    {"OPAQUE_WIN32_KMT", 0x00000004},
+    {"D3D12_FENCE", 0x00000008},
+    {"D3D11_FENCE", 0x00000008},
+    {"SYNC_FD", 0x00000010},
+};
+constexpr EnumValueSet VkExternalSemaphoreFeatureFlagBitsSets[] = {
+    {"EXPORTABLE", 0x00000001},
+    {"IMPORTABLE", 0x00000002},
+};
+constexpr EnumValueSet VkSemaphoreImportFlagBitsSets[] = {
+    {"TEMPORARY", 0x00000001},
+};
+constexpr EnumValueSet VkExternalFenceHandleTypeFlagBitsSets[] = {
+    {"OPAQUE_FD", 0x00000001},
+    {"OPAQUE_WIN32", 0x00000002},
+    {"OPAQUE_WIN32_KMT", 0x00000004},
+    {"SYNC_FD", 0x00000008},
+};
+constexpr EnumValueSet VkExternalFenceFeatureFlagBitsSets[] = {
+    {"EXPORTABLE", 0x00000001},
+    {"IMPORTABLE", 0x00000002},
+};
+constexpr EnumValueSet VkFenceImportFlagBitsSets[] = {
+    {"TEMPORARY", 0x00000001},
+};
+constexpr EnumValueSet VkSurfaceCounterFlagBitsEXTSets[] = {
+    {"VBLANK", 0x00000001},
+    {"VBLANK", 0x00000001},
+};
+constexpr EnumValueSet VkDisplayPowerStateEXTSets[] = {
+    {"OFF", 0},
+    {"SUSPEND", 1},
+    {"ON", 2},
+};
+constexpr EnumValueSet VkDeviceEventTypeEXTSets[] = {
+    {"DISPLAY_HOTPLUG", 0},
+};
+constexpr EnumValueSet VkDisplayEventTypeEXTSets[] = {
+    {"FIRST_PIXEL_OUT", 0},
+};
+constexpr EnumValueSet VkPeerMemoryFeatureFlagBitsSets[] = {
+    {"COPY_SRC", 0x00000001},
+    {"COPY_DST", 0x00000002},
+    {"GENERIC_SRC", 0x00000004},
+    {"GENERIC_DST", 0x00000008},
+};
+constexpr EnumValueSet VkMemoryAllocateFlagBitsSets[] = {
+    {"DEVICE_MASK", 0x00000001},
+};
+constexpr EnumValueSet VkDeviceGroupPresentModeFlagBitsKHRSets[] = {
+    {"LOCAL", 0x00000001},
+    {"REMOTE", 0x00000002},
+    {"SUM", 0x00000004},
+    {"LOCAL_MULTI_DEVICE", 0x00000008},
+};
+constexpr EnumValueSet VkViewportCoordinateSwizzleNVSets[] = {
+    {"POSITIVE_X", 0},
+    {"NEGATIVE_X", 1},
+    {"POSITIVE_Y", 2},
+    {"NEGATIVE_Y", 3},
+    {"POSITIVE_Z", 4},
+    {"NEGATIVE_Z", 5},
+    {"POSITIVE_W", 6},
+    {"NEGATIVE_W", 7},
+};
+constexpr EnumValueSet VkDiscardRectangleModeEXTSets[] = {
+    {"INCLUSIVE", 0},
+    {"EXCLUSIVE", 1},
+};
+constexpr EnumValueSet VkPointClippingBehaviorSets[] = {
+    {"ALL_CLIP_PLANES", 0},
+    {"USER_CLIP_PLANES_ONLY", 1},
+};
+constexpr EnumValueSet VkSamplerReductionModeSets[] = {
+    {"WEIGHTED_AVERAGE", 0},
+    {"MIN", 1},
+    {"MAX", 2},
+};
+constexpr EnumValueSet VkTessellationDomainOriginSets[] = {
+    {"UPPER_LEFT", 0},
+    {"LOWER_LEFT", 1},
+};
+constexpr EnumValueSet VkSamplerYcbcrModelConversionSets[] = {
+    {"RGB_IDENTITY", 0},
+    {"YCBCR_IDENTITY", 1},
+    {"YCBCR_709", 2},
+    {"YCBCR_601", 3},
+    {"YCBCR_2020", 4},
+};
+constexpr EnumValueSet VkSamplerYcbcrRangeSets[] = {
+    {"ITU_FULL", 0},
+    {"ITU_NARROW", 1},
+};
+constexpr EnumValueSet VkChromaLocationSets[] = {
+    {"COSITED_EVEN", 0},
+    {"MIDPOINT", 1},
+};
+constexpr EnumValueSet VkBlendOverlapEXTSets[] = {
+    {"UNCORRELATED", 0},
+    {"DISJOINT", 1},
+    {"CONJOINT", 2},
+};
+constexpr EnumValueSet VkCoverageModulationModeNVSets[] = {
+    {"NONE", 0},
+    {"RGB", 1},
+    {"ALPHA", 2},
+    {"RGBA", 3},
+};
+constexpr EnumValueSet VkCoverageReductionModeNVSets[] = {
+    {"MERGE", 0},
+    {"TRUNCATE", 1},
+};
+constexpr EnumValueSet VkValidationCacheHeaderVersionEXTSets[] = {
+    {"ONE", 1},
+};
+constexpr EnumValueSet VkShaderInfoTypeAMDSets[] = {
+    {"STATISTICS", 0},
+    {"BINARY", 1},
+    {"DISASSEMBLY", 2},
+};
+constexpr EnumValueSet VkQueueGlobalPriorityEXTSets[] = {
+    {"LOW", 128},
+    {"MEDIUM", 256},
+    {"HIGH", 512},
+    {"REALTIME", 1024},
+};
+constexpr EnumValueSet VkDebugUtilsMessageSeverityFlagBitsEXTSets[] = {
+    {"VERBOSE", 0x00000001},
+    {"INFO", 0x00000010},
+    {"WARNING", 0x00000100},
+    {"ERROR", 0x00001000},
+};
+constexpr EnumValueSet VkDebugUtilsMessageTypeFlagBitsEXTSets[] = {
+    {"GENERAL", 0x00000001},
+    {"VALIDATION", 0x00000002},
+    {"PERFORMANCE", 0x00000004},
+};
+constexpr EnumValueSet VkConservativeRasterizationModeEXTSets[] = {
+    {"DISABLED", 0},
+    {"OVERESTIMATE", 1},
+    {"UNDERESTIMATE", 2},
+};
+constexpr EnumValueSet VkDescriptorBindingFlagBitsSets[] = {
+    {"UPDATE_AFTER_BIND", 0x00000001},
+    {"UPDATE_UNUSED_WHILE_PENDING", 0x00000002},
+    {"PARTIALLY_BOUND", 0x00000004},
+    {"VARIABLE_DESCRIPTOR_COUNT", 0x00000008},
+};
+constexpr EnumValueSet VkVendorIdSets[] = {
+    {"VIV", 0x10001},
+    {"VSI", 0x10002},
+    {"KAZAN", 0x10003},
+    {"CODEPLAY", 0x10004},
+    {"MESA", 0x10005},
+    {"POCL", 0x10006},
+};
+constexpr EnumValueSet VkDriverIdSets[] = {
+    {"AMD_PROPRIETARY", 1},
+    {"AMD_OPEN_SOURCE", 2},
+    {"MESA_RADV", 3},
+    {"NVIDIA_PROPRIETARY", 4},
+    {"INTEL_PROPRIETARY_WINDOWS", 5},
+    {"INTEL_OPEN_SOURCE", 6},
+    {"IMAGINATION_PROPRIETARY", 7},
+    {"QUALCOMM_PROPRIETARY", 8},
+    {"ARM_PROPRIETARY", 9},
+    {"GOOGLE_SWIFTSHADER", 10},
+    {"GGP_PROPRIETARY", 11},
+    {"BROADCOM_PROPRIETARY", 12},
+    {"MESA_LLVMPIPE", 13},
+    {"MOLTENVK", 14},
+    {"COREAVI_PROPRIETARY", 15},
+    {"JUICE_PROPRIETARY", 16},
+    {"VERISILICON_PROPRIETARY", 17},
+    {"MESA_TURNIP", 18},
+    {"MESA_V3DV", 19},
+    {"MESA_PANVK", 20},
+};
+constexpr EnumValueSet VkConditionalRenderingFlagBitsEXTSets[] = {
+    {"INVERTED", 0x00000001},
+};
+constexpr EnumValueSet VkResolveModeFlagBitsSets[] = {
+    {"NONE", 0},
+    {"SAMPLE_ZERO", 0x00000001},
+    {"AVERAGE", 0x00000002},
+    {"MIN", 0x00000004},
+    {"MAX", 0x00000008},
+};
+constexpr EnumValueSet VkShadingRatePaletteEntryNVSets[] = {
+    {"NO_INVOCATIONS", 0},
+    {"16_INVOCATIONS_PER_PIXEL", 1},
+    {"8_INVOCATIONS_PER_PIXEL", 2},
+    {"4_INVOCATIONS_PER_PIXEL", 3},
+    {"2_INVOCATIONS_PER_PIXEL", 4},
+    {"1_INVOCATION_PER_PIXEL", 5},
+    {"1_INVOCATION_PER_2X1_PIXELS", 6},
+    {"1_INVOCATION_PER_1X2_PIXELS", 7},
+    {"1_INVOCATION_PER_2X2_PIXELS", 8},
+    {"1_INVOCATION_PER_4X2_PIXELS", 9},
+    {"1_INVOCATION_PER_2X4_PIXELS", 10},
+    {"1_INVOCATION_PER_4X4_PIXELS", 11},
+};
+constexpr EnumValueSet VkCoarseSampleOrderTypeNVSets[] = {
+    {"DEFAULT", 0},
+    {"CUSTOM", 1},
+    {"PIXEL_MAJOR", 2},
+    {"SAMPLE_MAJOR", 3},
+};
+constexpr EnumValueSet VkGeometryInstanceFlagBitsKHRSets[] = {
+    {"TRIANGLE_FACING_CULL_DISABLE", 0x00000001},
+    {"TRIANGLE_FLIP_FACING", 0x00000002},
+    {"FORCE_OPAQUE", 0x00000004},
+    {"FORCE_NO_OPAQUE", 0x00000008},
+    {"TRIANGLE_FRONT_COUNTERCLOCKWISE", 0x00000002},
+};
+constexpr EnumValueSet VkGeometryFlagBitsKHRSets[] = {
+    {"OPAQUE", 0x00000001},
+    {"NO_DUPLICATE_ANY_HIT_INVOCATION", 0x00000002},
+};
+constexpr EnumValueSet VkBuildAccelerationStructureFlagBitsKHRSets[] = {
+    {"ALLOW_UPDATE", 0x00000001},
+    {"ALLOW_COMPACTION", 0x00000002},
+    {"PREFER_FAST_TRACE", 0x00000004},
+    {"PREFER_FAST_BUILD", 0x00000008},
+    {"LOW_MEMORY", 0x00000010},
+};
+constexpr EnumValueSet VkAccelerationStructureCreateFlagBitsKHRSets[] = {
+    {"DEVICE_ADDRESS_CAPTURE_REPLAY", 0x00000001},
+};
+constexpr EnumValueSet VkCopyAccelerationStructureModeKHRSets[] = {
+    {"CLONE", 0},
+    {"COMPACT", 1},
+    {"SERIALIZE", 2},
+    {"DESERIALIZE", 3},
+};
+constexpr EnumValueSet VkBuildAccelerationStructureModeKHRSets[] = {
+    {"BUILD", 0},
+    {"UPDATE", 1},
+};
+constexpr EnumValueSet VkAccelerationStructureTypeKHRSets[] = {
+    {"TOP_LEVEL", 0},
+    {"BOTTOM_LEVEL", 1},
+    {"GENERIC", 2},
+};
+constexpr EnumValueSet VkGeometryTypeKHRSets[] = {
+    {"TRIANGLES", 0},
+    {"AABBS", 1},
+    {"INSTANCES", 2},
+};
+constexpr EnumValueSet VkAccelerationStructureMemoryRequirementsTypeNVSets[] = {
+    {"OBJECT", 0},
+    {"BUILD_SCRATCH", 1},
+    {"UPDATE_SCRATCH", 2},
+};
+constexpr EnumValueSet VkAccelerationStructureBuildTypeKHRSets[] = {
+    {"HOST", 0},
+    {"DEVICE", 1},
+    {"HOST_OR_DEVICE", 2},
+};
+constexpr EnumValueSet VkRayTracingShaderGroupTypeKHRSets[] = {
+    {"GENERAL", 0},
+    {"TRIANGLES_HIT_GROUP", 1},
+    {"PROCEDURAL_HIT_GROUP", 2},
+};
+constexpr EnumValueSet VkAccelerationStructureCompatibilityKHRSets[] = {
+    {"COMPATIBLE", 0},
+    {"INCOMPATIBLE", 1},
+};
+constexpr EnumValueSet VkShaderGroupShaderKHRSets[] = {
+    {"GENERAL", 0},
+    {"CLOSEST_HIT", 1},
+    {"ANY_HIT", 2},
+    {"INTERSECTION", 3},
+};
+constexpr EnumValueSet VkMemoryOverallocationBehaviorAMDSets[] = {
+    {"DEFAULT", 0},
+    {"ALLOWED", 1},
+    {"DISALLOWED", 2},
+};
+constexpr EnumValueSet VkScopeNVSets[] = {
+    {"DEVICE", 1},
+    {"WORKGROUP", 2},
+    {"SUBGROUP", 3},
+    {"QUEUE_FAMILY", 5},
+};
+constexpr EnumValueSet VkComponentTypeNVSets[] = {
+    {"FLOAT16", 0},
+    {"FLOAT32", 1},
+    {"FLOAT64", 2},
+    {"SINT8", 3},
+    {"SINT16", 4},
+    {"SINT32", 5},
+    {"SINT64", 6},
+    {"UINT8", 7},
+    {"UINT16", 8},
+    {"UINT32", 9},
+    {"UINT64", 10},
+};
+constexpr EnumValueSet VkDeviceDiagnosticsConfigFlagBitsNVSets[] = {
+    {"ENABLE_SHADER_DEBUG_INFO", 0x00000001},
+    {"ENABLE_RESOURCE_TRACKING", 0x00000002},
+    {"ENABLE_AUTOMATIC_CHECKPOINTS", 0x00000004},
+};
+constexpr EnumValueSet VkPipelineCreationFeedbackFlagBitsEXTSets[] = {
+    {"VALID", 0x00000001},
+    {"APPLICATION_PIPELINE_CACHE_HIT", 0x00000002},
+    {"BASE_PIPELINE_ACCELERATION", 0x00000004},
+};
+constexpr EnumValueSet VkFullScreenExclusiveEXTSets[] = {
+    {"DEFAULT", 0},
+    {"ALLOWED", 1},
+    {"DISALLOWED", 2},
+    {"APPLICATION_CONTROLLED", 3},
+};
+constexpr EnumValueSet VkPerformanceCounterScopeKHRSets[] = {
+    {"COMMAND_BUFFER", 0},
+    {"RENDER_PASS", 1},
+    {"COMMAND", 2},
+    {"VK_QUERY_SCOPE_COMMAND_BUFFER", 0},
+    {"VK_QUERY_SCOPE_RENDER_PASS", 1},
+    {"VK_QUERY_SCOPE_COMMAND", 2},
+};
+constexpr EnumValueSet VkPerformanceCounterUnitKHRSets[] = {
+    {"GENERIC", 0},
+    {"PERCENTAGE", 1},
+    {"NANOSECONDS", 2},
+    {"BYTES", 3},
+    {"BYTES_PER_SECOND", 4},
+    {"KELVIN", 5},
+    {"WATTS", 6},
+    {"VOLTS", 7},
+    {"AMPS", 8},
+    {"HERTZ", 9},
+    {"CYCLES", 10},
+};
+constexpr EnumValueSet VkPerformanceCounterStorageKHRSets[] = {
+    {"INT32", 0},
+    {"INT64", 1},
+    {"UINT32", 2},
+    {"UINT64", 3},
+    {"FLOAT32", 4},
+    {"FLOAT64", 5},
+};
+constexpr EnumValueSet VkPerformanceCounterDescriptionFlagBitsKHRSets[] = {
+    {"PERFORMANCE_IMPACTING", 0x00000001},
+    {"PERFORMANCE_IMPACTING", 0x00000001},
+    {"CONCURRENTLY_IMPACTED", 0x00000002},
+    {"CONCURRENTLY_IMPACTED", 0x00000002},
+};
+constexpr EnumValueSet VkPerformanceConfigurationTypeINTELSets[] = {
+    {"COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED", 0},
+};
+constexpr EnumValueSet VkQueryPoolSamplingModeINTELSets[] = {
+    {"MANUAL", 0},
+};
+constexpr EnumValueSet VkPerformanceOverrideTypeINTELSets[] = {
+    {"NULL_HARDWARE", 0},
+    {"FLUSH_GPU_CACHES", 1},
+};
+constexpr EnumValueSet VkPerformanceParameterTypeINTELSets[] = {
+    {"HW_COUNTERS_SUPPORTED", 0},
+    {"STREAM_MARKER_VALID_BITS", 1},
+};
+constexpr EnumValueSet VkPerformanceValueTypeINTELSets[] = {
+    {"UINT32", 0},
+    {"UINT64", 1},
+    {"FLOAT", 2},
+    {"BOOL", 3},
+    {"STRING", 4},
+};
+constexpr EnumValueSet VkShaderFloatControlsIndependenceSets[] = {
+    {"32_BIT_ONLY", 0},
+    {"ALL", 1},
+    {"NONE", 2},
+};
+constexpr EnumValueSet VkPipelineExecutableStatisticFormatKHRSets[] = {
+    {"BOOL32", 0},
+    {"INT64", 1},
+    {"UINT64", 2},
+    {"FLOAT64", 3},
+};
+constexpr EnumValueSet VkLineRasterizationModeEXTSets[] = {
+    {"DEFAULT", 0},
+    {"RECTANGULAR", 1},
+    {"BRESENHAM", 2},
+    {"RECTANGULAR_SMOOTH", 3},
+};
+constexpr EnumValueSet VkToolPurposeFlagBitsEXTSets[] = {
+    {"VALIDATION", 0x00000001},
+    {"PROFILING", 0x00000002},
+    {"TRACING", 0x00000004},
+    {"ADDITIONAL_FEATURES", 0x00000008},
+    {"MODIFYING_FEATURES", 0x00000010},
+};
+constexpr EnumValueSet VkFragmentShadingRateCombinerOpKHRSets[] = {
+    {"KEEP", 0},
+    {"REPLACE", 1},
+    {"MIN", 2},
+    {"MAX", 3},
+    {"MUL", 4},
+};
+constexpr EnumValueSet VkFragmentShadingRateNVSets[] = {
+    {"1_INVOCATION_PER_PIXEL", 0},
+    {"1_INVOCATION_PER_1X2_PIXELS", 1},
+    {"1_INVOCATION_PER_2X1_PIXELS", 4},
+    {"1_INVOCATION_PER_2X2_PIXELS", 5},
+    {"1_INVOCATION_PER_2X4_PIXELS", 6},
+    {"1_INVOCATION_PER_4X2_PIXELS", 9},
+    {"1_INVOCATION_PER_4X4_PIXELS", 10},
+    {"2_INVOCATIONS_PER_PIXEL", 11},
+    {"4_INVOCATIONS_PER_PIXEL", 12},
+    {"8_INVOCATIONS_PER_PIXEL", 13},
+    {"16_INVOCATIONS_PER_PIXEL", 14},
+    {"NO_INVOCATIONS", 15},
+};
+constexpr EnumValueSet VkFragmentShadingRateTypeNVSets[] = {
+    {"FRAGMENT_SIZE", 0},
+    {"ENUMS", 1},
+};
+constexpr EnumValueSet VkAccessFlagBits2KHRSets[] = {
+    {"VK_ACCESS_2_NONE", 0},
+    {"VK_ACCESS_2_INDIRECT_COMMAND_READ", 0x00000001},
+    {"VK_ACCESS_2_INDEX_READ", 0x00000002},
+    {"VK_ACCESS_2_VERTEX_ATTRIBUTE_READ", 0x00000004},
+    {"VK_ACCESS_2_UNIFORM_READ", 0x00000008},
+    {"VK_ACCESS_2_INPUT_ATTACHMENT_READ", 0x00000010},
+    {"VK_ACCESS_2_SHADER_READ", 0x00000020},
+    {"VK_ACCESS_2_SHADER_WRITE", 0x00000040},
+    {"VK_ACCESS_2_COLOR_ATTACHMENT_READ", 0x00000080},
+    {"VK_ACCESS_2_COLOR_ATTACHMENT_WRITE", 0x00000100},
+    {"VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ", 0x00000200},
+    {"VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE", 0x00000400},
+    {"VK_ACCESS_2_TRANSFER_READ", 0x00000800},
+    {"VK_ACCESS_2_TRANSFER_WRITE", 0x00001000},
+    {"VK_ACCESS_2_HOST_READ", 0x00002000},
+    {"VK_ACCESS_2_HOST_WRITE", 0x00004000},
+    {"VK_ACCESS_2_MEMORY_READ", 0x00008000},
+    {"VK_ACCESS_2_MEMORY_WRITE", 0x00010000},
+    {"VK_ACCESS_2_SHADER_SAMPLED_READ", 0x00000001},
+    {"VK_ACCESS_2_SHADER_STORAGE_READ", 0x00000002},
+    {"VK_ACCESS_2_SHADER_STORAGE_WRITE", 0x00000004},
+};
+constexpr EnumValueSet VkPipelineStageFlagBits2KHRSets[] = {
+    {"VK_PIPELINE_STAGE_2_NONE", 0},
+    {"VK_PIPELINE_STAGE_2_TOP_OF_PIPE", 0x00000001},
+    {"VK_PIPELINE_STAGE_2_DRAW_INDIRECT", 0x00000002},
+    {"VK_PIPELINE_STAGE_2_VERTEX_INPUT", 0x00000004},
+    {"VK_PIPELINE_STAGE_2_VERTEX_SHADER", 0x00000008},
+    {"VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER", 0x00000010},
+    {"VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER", 0x00000020},
+    {"VK_PIPELINE_STAGE_2_GEOMETRY_SHADER", 0x00000040},
+    {"VK_PIPELINE_STAGE_2_FRAGMENT_SHADER", 0x00000080},
+    {"VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS", 0x00000100},
+    {"VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS", 0x00000200},
+    {"VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT", 0x00000400},
+    {"VK_PIPELINE_STAGE_2_COMPUTE_SHADER", 0x00000800},
+    {"VK_PIPELINE_STAGE_2_ALL_TRANSFER", 0x00001000},
+    {"VK_PIPELINE_STAGE_2_TRANSFER", 0x00001000},
+    {"VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE", 0x00002000},
+    {"VK_PIPELINE_STAGE_2_HOST", 0x00004000},
+    {"VK_PIPELINE_STAGE_2_ALL_GRAPHICS", 0x00008000},
+    {"VK_PIPELINE_STAGE_2_ALL_COMMANDS", 0x00010000},
+    {"VK_PIPELINE_STAGE_2_COPY", 0x00000001},
+    {"VK_PIPELINE_STAGE_2_RESOLVE", 0x00000002},
+    {"VK_PIPELINE_STAGE_2_BLIT", 0x00000004},
+    {"VK_PIPELINE_STAGE_2_CLEAR", 0x00000008},
+    {"VK_PIPELINE_STAGE_2_INDEX_INPUT", 0x00000010},
+    {"VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT", 0x00000020},
+    {"VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS", 0x00000040},
+};
+constexpr EnumValueSet VkSubmitFlagBitsKHRSets[] = {
+    {"PROTECTED", 0x00000001},
+};
+constexpr EnumValueSet VkProvokingVertexModeEXTSets[] = {
+    {"FIRST_VERTEX", 0},
+    {"LAST_VERTEX", 1},
+};
+constexpr EnumValueSet VkAccelerationStructureMotionInstanceTypeNVSets[] = {
+    {"STATIC", 0},
+    {"MATRIX_MOTION", 1},
+    {"SRT_MOTION", 2},
+};
+constexpr EnumValueSet VkVideoCodecOperationFlagBitsKHRSets[] = {
+    {"INVALID", 0},
+};
+constexpr EnumValueSet VkVideoChromaSubsamplingFlagBitsKHRSets[] = {
+    {"INVALID", 0},
+    {"MONOCHROME", 0x00000001},
+    {"420", 0x00000002},
+    {"422", 0x00000004},
+    {"444", 0x00000008},
+};
+constexpr EnumValueSet VkVideoComponentBitDepthFlagBitsKHRSets[] = {
+    {"INVALID", 0},
+    {"8", 0x00000001},
+    {"10", 0x00000004},
+    {"12", 0x00000010},
+};
+constexpr EnumValueSet VkVideoCapabilityFlagBitsKHRSets[] = {
+    {"PROTECTED_CONTENT", 0x00000001},
+    {"SEPARATE_REFERENCE_IMAGES", 0x00000002},
+};
+constexpr EnumValueSet VkVideoSessionCreateFlagBitsKHRSets[] = {
+    {"DEFAULT", 0},
+    {"PROTECTED_CONTENT", 0x00000001},
+};
+constexpr EnumValueSet VkVideoCodingQualityPresetFlagBitsKHRSets[] = {
+    {"NORMAL", 0x00000001},
+    {"POWER", 0x00000002},
+    {"QUALITY", 0x00000004},
+};
+constexpr EnumValueSet VkVideoDecodeH264PictureLayoutFlagBitsEXTSets[] = {
+    {"PROGRESSIVE", 0},
+    {"INTERLACED_INTERLEAVED_LINES", 0x00000001},
+    {"INTERLACED_SEPARATE_PLANES", 0x00000002},
+};
+constexpr EnumValueSet VkVideoCodingControlFlagBitsKHRSets[] = {
+    {"DEFAULT", 0},
+    {"RESET", 0x00000001},
+};
+constexpr EnumValueSet VkQueryResultStatusKHRSets[] = {
+    {"ERROR", -1},
+    {"NOT_READY", 0},
+    {"COMPLETE", 1},
+};
+constexpr EnumValueSet VkVideoDecodeFlagBitsKHRSets[] = {
+    {"DEFAULT", 0},
+    {"RESERVED_0", 0x00000001},
+};
+constexpr EnumValueSet VkVideoEncodeFlagBitsKHRSets[] = {
+    {"DEFAULT", 0},
+    {"RESERVED_0", 0x00000001},
+};
+constexpr EnumValueSet VkVideoEncodeRateControlFlagBitsKHRSets[] = {
+    {"DEFAULT", 0},
+    {"RESET", 0x00000001},
+};
+constexpr EnumValueSet VkVideoEncodeRateControlModeFlagBitsKHRSets[] = {
+    {"NONE", 0},
+    {"CBR", 1},
+    {"VBR", 2},
+};
+constexpr EnumValueSet VkVideoEncodeH264CapabilityFlagBitsEXTSets[] = {
+    {"CABAC", 0x00000001},
+    {"CAVLC", 0x00000002},
+    {"WEIGHTED_BI_PRED_IMPLICIT", 0x00000004},
+    {"TRANSFORM_8X8", 0x00000008},
+    {"CHROMA_QP_OFFSET", 0x00000010},
+    {"SECOND_CHROMA_QP_OFFSET", 0x00000020},
+    {"DEBLOCKING_FILTER_DISABLED", 0x00000040},
+    {"DEBLOCKING_FILTER_ENABLED", 0x00000080},
+    {"DEBLOCKING_FILTER_PARTIAL", 0x00000100},
+    {"MULTIPLE_SLICE_PER_FRAME", 0x00000200},
+    {"EVENLY_DISTRIBUTED_SLICE_SIZE", 0x00000400},
+};
+constexpr EnumValueSet VkVideoEncodeH264InputModeFlagBitsEXTSets[] = {
+    {"FRAME", 0x00000001},
+    {"SLICE", 0x00000002},
+    {"NON_VCL", 0x00000004},
+};
+constexpr EnumValueSet VkVideoEncodeH264OutputModeFlagBitsEXTSets[] = {
+    {"FRAME", 0x00000001},
+    {"SLICE", 0x00000002},
+    {"NON_VCL", 0x00000004},
+};
+constexpr EnumValueSet VkVideoEncodeH264CreateFlagBitsEXTSets[] = {
+    {"DEFAULT", 0},
+    {"RESERVED_0", 0x00000001},
+};
+constexpr EnumValueSet VkImageConstraintsInfoFlagBitsFUCHSIASets[] = {
+    {"CPU_READ_RARELY", 0x00000001},
+    {"CPU_READ_OFTEN", 0x00000002},
+    {"CPU_WRITE_RARELY", 0x00000004},
+    {"CPU_WRITE_OFTEN", 0x00000008},
+    {"PROTECTED_OPTIONAL", 0x00000010},
+};
+constexpr EnumValueSet VkFormatFeatureFlagBits2KHRSets[] = {
+    {"VK_FORMAT_FEATURE_2_SAMPLED_IMAGE", 0x00000001},
+    {"VK_FORMAT_FEATURE_2_STORAGE_IMAGE", 0x00000002},
+    {"VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC", 0x00000004},
+    {"VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER", 0x00000008},
+    {"VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER", 0x00000010},
+    {"VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC", 0x00000020},
+    {"VK_FORMAT_FEATURE_2_VERTEX_BUFFER", 0x00000040},
+    {"VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT", 0x00000080},
+    {"VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND", 0x00000100},
+    {"VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT", 0x00000200},
+    {"VK_FORMAT_FEATURE_2_BLIT_SRC", 0x00000400},
+    {"VK_FORMAT_FEATURE_2_BLIT_DST", 0x00000800},
+    {"VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR", 0x00001000},
+    {"VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC", 0x00002000},
+    {"VK_FORMAT_FEATURE_2_TRANSFER_SRC", 0x00004000},
+    {"VK_FORMAT_FEATURE_2_TRANSFER_DST", 0x00008000},
+    {"VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX", 0x00010000},
+    {"VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES", 0x00020000},
+    {"VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER", 0x00040000},
+    {"VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER", 0x00080000},
+    {"VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT", 0x00100000},
+    {"VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE", 0x00200000},
+    {"VK_FORMAT_FEATURE_2_DISJOINT", 0x00400000},
+    {"VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES", 0x00800000},
+    {"VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT", 0x80000000},
+    {"VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT", 0x00000001},
+    {"VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON", 0x00000002},
+};
+constexpr EnumValueSet VkVideoEncodeH265InputModeFlagBitsEXTSets[] = {
+    {"FRAME", 0x00000001},
+    {"SLICE", 0x00000002},
+    {"NON_VCL", 0x00000004},
+};
+constexpr EnumValueSet VkVideoEncodeH265OutputModeFlagBitsEXTSets[] = {
+    {"FRAME", 0x00000001},
+    {"SLICE", 0x00000002},
+    {"NON_VCL", 0x00000004},
+};
+constexpr EnumValueSet VkVideoEncodeH265CtbSizeFlagBitsEXTSets[] = {
+    {"8", 0x00000001},
+    {"16", 0x00000002},
+    {"32", 0x00000004},
+    {"64", 0x00000008},
+};
+constexpr EnumValueSet VkRenderingFlagBitsKHRSets[] = {
+    {"CONTENTS_SECONDARY_COMMAND_BUFFERS", 0x00000001},
+    {"SUSPENDING", 0x00000002},
+    {"RESUMING", 0x00000004},
+};
+
+struct EnumType {
+    std::string_view name;
+    EnumValueSet const* data;
+    uint32_t count;
+};
+
+constexpr std::array<EnumType, 209> enumTypes = {{
+  {"VkImageLayout", VkImageLayoutSets, 9},
+  {"VkAttachmentLoadOp", VkAttachmentLoadOpSets, 3},
+  {"VkAttachmentStoreOp", VkAttachmentStoreOpSets, 2},
+  {"VkImageType", VkImageTypeSets, 3},
+  {"VkImageTiling", VkImageTilingSets, 2},
+  {"VkImageViewType", VkImageViewTypeSets, 7},
+  {"VkCommandBufferLevel", VkCommandBufferLevelSets, 2},
+  {"VkComponentSwizzle", VkComponentSwizzleSets, 7},
+  {"VkDescriptorType", VkDescriptorTypeSets, 11},
+  {"VkQueryType", VkQueryTypeSets, 3},
+  {"VkBorderColor", VkBorderColorSets, 6},
+  {"VkPipelineBindPoint", VkPipelineBindPointSets, 2},
+  {"VkPipelineCacheHeaderVersion", VkPipelineCacheHeaderVersionSets, 1},
+  {"VkPipelineCacheCreateFlagBits", nullptr, 0},
+  {"VkPrimitiveTopology", VkPrimitiveTopologySets, 11},
+  {"VkSharingMode", VkSharingModeSets, 2},
+  {"VkIndexType", VkIndexTypeSets, 2},
+  {"VkFilter", VkFilterSets, 2},
+  {"VkSamplerMipmapMode", VkSamplerMipmapModeSets, 2},
+  {"VkSamplerAddressMode", VkSamplerAddressModeSets, 4},
+  {"VkCompareOp", VkCompareOpSets, 8},
+  {"VkPolygonMode", VkPolygonModeSets, 3},
+  {"VkFrontFace", VkFrontFaceSets, 2},
+  {"VkBlendFactor", VkBlendFactorSets, 19},
+  {"VkBlendOp", VkBlendOpSets, 5},
+  {"VkStencilOp", VkStencilOpSets, 8},
+  {"VkLogicOp", VkLogicOpSets, 16},
+  {"VkInternalAllocationType", VkInternalAllocationTypeSets, 1},
+  {"VkSystemAllocationScope", VkSystemAllocationScopeSets, 5},
+  {"VkPhysicalDeviceType", VkPhysicalDeviceTypeSets, 5},
+  {"VkVertexInputRate", VkVertexInputRateSets, 2},
+  {"VkFormat", VkFormatSets, 185},
+  {"VkStructureType", VkStructureTypeSets, 49},
+  {"VkSubpassContents", VkSubpassContentsSets, 2},
+  {"VkDynamicState", VkDynamicStateSets, 9},
+  {"VkDescriptorUpdateTemplateType", VkDescriptorUpdateTemplateTypeSets, 1},
+  {"VkObjectType", VkObjectTypeSets, 26},
+  {"VkQueueFlagBits", VkQueueFlagBitsSets, 4},
+  {"VkCullModeFlagBits", VkCullModeFlagBitsSets, 4},
+  {"VkRenderPassCreateFlagBits", nullptr, 0},
+  {"VkDeviceQueueCreateFlagBits", nullptr, 0},
+  {"VkMemoryPropertyFlagBits", VkMemoryPropertyFlagBitsSets, 5},
+  {"VkMemoryHeapFlagBits", VkMemoryHeapFlagBitsSets, 1},
+  {"VkAccessFlagBits", VkAccessFlagBitsSets, 17},
+  {"VkBufferUsageFlagBits", VkBufferUsageFlagBitsSets, 9},
+  {"VkBufferCreateFlagBits", VkBufferCreateFlagBitsSets, 3},
+  {"VkShaderStageFlagBits", VkShaderStageFlagBitsSets, 8},
+  {"VkImageUsageFlagBits", VkImageUsageFlagBitsSets, 8},
+  {"VkImageCreateFlagBits", VkImageCreateFlagBitsSets, 5},
+  {"VkImageViewCreateFlagBits", nullptr, 0},
+  {"VkSamplerCreateFlagBits", nullptr, 0},
+  {"VkPipelineCreateFlagBits", VkPipelineCreateFlagBitsSets, 3},
+  {"VkPipelineShaderStageCreateFlagBits", nullptr, 0},
+  {"VkColorComponentFlagBits", VkColorComponentFlagBitsSets, 4},
+  {"VkFenceCreateFlagBits", VkFenceCreateFlagBitsSets, 1},
+  {"VkSemaphoreCreateFlagBits", nullptr, 0},
+  {"VkFormatFeatureFlagBits", VkFormatFeatureFlagBitsSets, 13},
+  {"VkQueryControlFlagBits", VkQueryControlFlagBitsSets, 1},
+  {"VkQueryResultFlagBits", VkQueryResultFlagBitsSets, 4},
+  {"VkCommandBufferUsageFlagBits", VkCommandBufferUsageFlagBitsSets, 3},
+  {"VkQueryPipelineStatisticFlagBits", VkQueryPipelineStatisticFlagBitsSets, 11},
+  {"VkImageAspectFlagBits", VkImageAspectFlagBitsSets, 4},
+  {"VkSparseImageFormatFlagBits", VkSparseImageFormatFlagBitsSets, 3},
+  {"VkSparseMemoryBindFlagBits", VkSparseMemoryBindFlagBitsSets, 1},
+  {"VkPipelineStageFlagBits", VkPipelineStageFlagBitsSets, 17},
+  {"VkCommandPoolCreateFlagBits", VkCommandPoolCreateFlagBitsSets, 2},
+  {"VkCommandPoolResetFlagBits", VkCommandPoolResetFlagBitsSets, 1},
+  {"VkCommandBufferResetFlagBits", VkCommandBufferResetFlagBitsSets, 1},
+  {"VkSampleCountFlagBits", VkSampleCountFlagBitsSets, 7},
+  {"VkAttachmentDescriptionFlagBits", VkAttachmentDescriptionFlagBitsSets, 1},
+  {"VkStencilFaceFlagBits", VkStencilFaceFlagBitsSets, 4},
+  {"VkDescriptorPoolCreateFlagBits", VkDescriptorPoolCreateFlagBitsSets, 1},
+  {"VkDependencyFlagBits", VkDependencyFlagBitsSets, 1},
+  {"VkSemaphoreType", VkSemaphoreTypeSets, 2},
+  {"VkSemaphoreWaitFlagBits", VkSemaphoreWaitFlagBitsSets, 1},
+  {"VkPresentModeKHR", VkPresentModeKHRSets, 4},
+  {"VkColorSpaceKHR", VkColorSpaceKHRSets, 2},
+  {"VkDisplayPlaneAlphaFlagBitsKHR", VkDisplayPlaneAlphaFlagBitsKHRSets, 4},
+  {"VkCompositeAlphaFlagBitsKHR", VkCompositeAlphaFlagBitsKHRSets, 4},
+  {"VkSurfaceTransformFlagBitsKHR", VkSurfaceTransformFlagBitsKHRSets, 9},
+  {"VkSwapchainImageUsageFlagBitsANDROID", VkSwapchainImageUsageFlagBitsANDROIDSets, 1},
+  {"VkTimeDomainEXT", VkTimeDomainEXTSets, 4},
+  {"VkDebugReportFlagBitsEXT", VkDebugReportFlagBitsEXTSets, 5},
+  {"VkDebugReportObjectTypeEXT", VkDebugReportObjectTypeEXTSets, 34},
+  {"VkDeviceMemoryReportEventTypeEXT", VkDeviceMemoryReportEventTypeEXTSets, 5},
+  {"VkRasterizationOrderAMD", VkRasterizationOrderAMDSets, 2},
+  {"VkExternalMemoryHandleTypeFlagBitsNV", VkExternalMemoryHandleTypeFlagBitsNVSets, 4},
+  {"VkExternalMemoryFeatureFlagBitsNV", VkExternalMemoryFeatureFlagBitsNVSets, 3},
+  {"VkValidationCheckEXT", VkValidationCheckEXTSets, 2},
+  {"VkValidationFeatureEnableEXT", VkValidationFeatureEnableEXTSets, 5},
+  {"VkValidationFeatureDisableEXT", VkValidationFeatureDisableEXTSets, 8},
+  {"VkSubgroupFeatureFlagBits", VkSubgroupFeatureFlagBitsSets, 8},
+  {"VkIndirectCommandsLayoutUsageFlagBitsNV", VkIndirectCommandsLayoutUsageFlagBitsNVSets, 3},
+  {"VkIndirectStateFlagBitsNV", VkIndirectStateFlagBitsNVSets, 1},
+  {"VkIndirectCommandsTokenTypeNV", VkIndirectCommandsTokenTypeNVSets, 8},
+  {"VkPrivateDataSlotCreateFlagBitsEXT", nullptr, 0},
+  {"VkDescriptorSetLayoutCreateFlagBits", nullptr, 0},
+  {"VkExternalMemoryHandleTypeFlagBits", VkExternalMemoryHandleTypeFlagBitsSets, 7},
+  {"VkExternalMemoryFeatureFlagBits", VkExternalMemoryFeatureFlagBitsSets, 3},
+  {"VkExternalSemaphoreHandleTypeFlagBits", VkExternalSemaphoreHandleTypeFlagBitsSets, 6},
+  {"VkExternalSemaphoreFeatureFlagBits", VkExternalSemaphoreFeatureFlagBitsSets, 2},
+  {"VkSemaphoreImportFlagBits", VkSemaphoreImportFlagBitsSets, 1},
+  {"VkExternalFenceHandleTypeFlagBits", VkExternalFenceHandleTypeFlagBitsSets, 4},
+  {"VkExternalFenceFeatureFlagBits", VkExternalFenceFeatureFlagBitsSets, 2},
+  {"VkFenceImportFlagBits", VkFenceImportFlagBitsSets, 1},
+  {"VkSurfaceCounterFlagBitsEXT", VkSurfaceCounterFlagBitsEXTSets, 2},
+  {"VkDisplayPowerStateEXT", VkDisplayPowerStateEXTSets, 3},
+  {"VkDeviceEventTypeEXT", VkDeviceEventTypeEXTSets, 1},
+  {"VkDisplayEventTypeEXT", VkDisplayEventTypeEXTSets, 1},
+  {"VkPeerMemoryFeatureFlagBits", VkPeerMemoryFeatureFlagBitsSets, 4},
+  {"VkMemoryAllocateFlagBits", VkMemoryAllocateFlagBitsSets, 1},
+  {"VkDeviceGroupPresentModeFlagBitsKHR", VkDeviceGroupPresentModeFlagBitsKHRSets, 4},
+  {"VkSwapchainCreateFlagBitsKHR", nullptr, 0},
+  {"VkViewportCoordinateSwizzleNV", VkViewportCoordinateSwizzleNVSets, 8},
+  {"VkDiscardRectangleModeEXT", VkDiscardRectangleModeEXTSets, 2},
+  {"VkSubpassDescriptionFlagBits", nullptr, 0},
+  {"VkPointClippingBehavior", VkPointClippingBehaviorSets, 2},
+  {"VkSamplerReductionMode", VkSamplerReductionModeSets, 3},
+  {"VkTessellationDomainOrigin", VkTessellationDomainOriginSets, 2},
+  {"VkSamplerYcbcrModelConversion", VkSamplerYcbcrModelConversionSets, 5},
+  {"VkSamplerYcbcrRange", VkSamplerYcbcrRangeSets, 2},
+  {"VkChromaLocation", VkChromaLocationSets, 2},
+  {"VkBlendOverlapEXT", VkBlendOverlapEXTSets, 3},
+  {"VkCoverageModulationModeNV", VkCoverageModulationModeNVSets, 4},
+  {"VkCoverageReductionModeNV", VkCoverageReductionModeNVSets, 2},
+  {"VkValidationCacheHeaderVersionEXT", VkValidationCacheHeaderVersionEXTSets, 1},
+  {"VkShaderInfoTypeAMD", VkShaderInfoTypeAMDSets, 3},
+  {"VkQueueGlobalPriorityEXT", VkQueueGlobalPriorityEXTSets, 4},
+  {"VkDebugUtilsMessageSeverityFlagBitsEXT", VkDebugUtilsMessageSeverityFlagBitsEXTSets, 4},
+  {"VkDebugUtilsMessageTypeFlagBitsEXT", VkDebugUtilsMessageTypeFlagBitsEXTSets, 3},
+  {"VkConservativeRasterizationModeEXT", VkConservativeRasterizationModeEXTSets, 3},
+  {"VkDescriptorBindingFlagBits", VkDescriptorBindingFlagBitsSets, 4},
+  {"VkVendorId", VkVendorIdSets, 6},
+  {"VkDriverId", VkDriverIdSets, 20},
+  {"VkConditionalRenderingFlagBitsEXT", VkConditionalRenderingFlagBitsEXTSets, 1},
+  {"VkResolveModeFlagBits", VkResolveModeFlagBitsSets, 5},
+  {"VkShadingRatePaletteEntryNV", VkShadingRatePaletteEntryNVSets, 12},
+  {"VkCoarseSampleOrderTypeNV", VkCoarseSampleOrderTypeNVSets, 4},
+  {"VkGeometryInstanceFlagBitsKHR", VkGeometryInstanceFlagBitsKHRSets, 5},
+  {"VkGeometryFlagBitsKHR", VkGeometryFlagBitsKHRSets, 2},
+  {"VkBuildAccelerationStructureFlagBitsKHR", VkBuildAccelerationStructureFlagBitsKHRSets, 5},
+  {"VkAccelerationStructureCreateFlagBitsKHR", VkAccelerationStructureCreateFlagBitsKHRSets, 1},
+  {"VkCopyAccelerationStructureModeKHR", VkCopyAccelerationStructureModeKHRSets, 4},
+  {"VkBuildAccelerationStructureModeKHR", VkBuildAccelerationStructureModeKHRSets, 2},
+  {"VkAccelerationStructureTypeKHR", VkAccelerationStructureTypeKHRSets, 3},
+  {"VkGeometryTypeKHR", VkGeometryTypeKHRSets, 3},
+  {"VkAccelerationStructureMemoryRequirementsTypeNV", VkAccelerationStructureMemoryRequirementsTypeNVSets, 3},
+  {"VkAccelerationStructureBuildTypeKHR", VkAccelerationStructureBuildTypeKHRSets, 3},
+  {"VkRayTracingShaderGroupTypeKHR", VkRayTracingShaderGroupTypeKHRSets, 3},
+  {"VkAccelerationStructureCompatibilityKHR", VkAccelerationStructureCompatibilityKHRSets, 2},
+  {"VkShaderGroupShaderKHR", VkShaderGroupShaderKHRSets, 4},
+  {"VkMemoryOverallocationBehaviorAMD", VkMemoryOverallocationBehaviorAMDSets, 3},
+  {"VkFramebufferCreateFlagBits", nullptr, 0},
+  {"VkScopeNV", VkScopeNVSets, 4},
+  {"VkComponentTypeNV", VkComponentTypeNVSets, 11},
+  {"VkDeviceDiagnosticsConfigFlagBitsNV", VkDeviceDiagnosticsConfigFlagBitsNVSets, 3},
+  {"VkPipelineCreationFeedbackFlagBitsEXT", VkPipelineCreationFeedbackFlagBitsEXTSets, 3},
+  {"VkFullScreenExclusiveEXT", VkFullScreenExclusiveEXTSets, 4},
+  {"VkPerformanceCounterScopeKHR", VkPerformanceCounterScopeKHRSets, 6},
+  {"VkPerformanceCounterUnitKHR", VkPerformanceCounterUnitKHRSets, 11},
+  {"VkPerformanceCounterStorageKHR", VkPerformanceCounterStorageKHRSets, 6},
+  {"VkPerformanceCounterDescriptionFlagBitsKHR", VkPerformanceCounterDescriptionFlagBitsKHRSets, 4},
+  {"VkAcquireProfilingLockFlagBitsKHR", nullptr, 0},
+  {"VkShaderCorePropertiesFlagBitsAMD", nullptr, 0},
+  {"VkPerformanceConfigurationTypeINTEL", VkPerformanceConfigurationTypeINTELSets, 1},
+  {"VkQueryPoolSamplingModeINTEL", VkQueryPoolSamplingModeINTELSets, 1},
+  {"VkPerformanceOverrideTypeINTEL", VkPerformanceOverrideTypeINTELSets, 2},
+  {"VkPerformanceParameterTypeINTEL", VkPerformanceParameterTypeINTELSets, 2},
+  {"VkPerformanceValueTypeINTEL", VkPerformanceValueTypeINTELSets, 5},
+  {"VkShaderFloatControlsIndependence", VkShaderFloatControlsIndependenceSets, 3},
+  {"VkPipelineExecutableStatisticFormatKHR", VkPipelineExecutableStatisticFormatKHRSets, 4},
+  {"VkLineRasterizationModeEXT", VkLineRasterizationModeEXTSets, 4},
+  {"VkShaderModuleCreateFlagBits", nullptr, 0},
+  {"VkPipelineCompilerControlFlagBitsAMD", nullptr, 0},
+  {"VkToolPurposeFlagBitsEXT", VkToolPurposeFlagBitsEXTSets, 5},
+  {"VkFragmentShadingRateCombinerOpKHR", VkFragmentShadingRateCombinerOpKHRSets, 5},
+  {"VkFragmentShadingRateNV", VkFragmentShadingRateNVSets, 12},
+  {"VkFragmentShadingRateTypeNV", VkFragmentShadingRateTypeNVSets, 2},
+  {"VkAccessFlagBits2KHR", VkAccessFlagBits2KHRSets, 21},
+  {"VkPipelineStageFlagBits2KHR", VkPipelineStageFlagBits2KHRSets, 26},
+  {"VkSubmitFlagBitsKHR", VkSubmitFlagBitsKHRSets, 1},
+  {"VkEventCreateFlagBits", nullptr, 0},
+  {"VkPipelineLayoutCreateFlagBits", nullptr, 0},
+  {"VkProvokingVertexModeEXT", VkProvokingVertexModeEXTSets, 2},
+  {"VkAccelerationStructureMotionInstanceTypeNV", VkAccelerationStructureMotionInstanceTypeNVSets, 3},
+  {"VkVideoCodecOperationFlagBitsKHR", VkVideoCodecOperationFlagBitsKHRSets, 1},
+  {"VkVideoChromaSubsamplingFlagBitsKHR", VkVideoChromaSubsamplingFlagBitsKHRSets, 5},
+  {"VkVideoComponentBitDepthFlagBitsKHR", VkVideoComponentBitDepthFlagBitsKHRSets, 4},
+  {"VkVideoCapabilityFlagBitsKHR", VkVideoCapabilityFlagBitsKHRSets, 2},
+  {"VkVideoSessionCreateFlagBitsKHR", VkVideoSessionCreateFlagBitsKHRSets, 2},
+  {"VkVideoCodingQualityPresetFlagBitsKHR", VkVideoCodingQualityPresetFlagBitsKHRSets, 3},
+  {"VkVideoDecodeH264PictureLayoutFlagBitsEXT", VkVideoDecodeH264PictureLayoutFlagBitsEXTSets, 3},
+  {"VkVideoCodingControlFlagBitsKHR", VkVideoCodingControlFlagBitsKHRSets, 2},
+  {"VkQueryResultStatusKHR", VkQueryResultStatusKHRSets, 3},
+  {"VkVideoDecodeFlagBitsKHR", VkVideoDecodeFlagBitsKHRSets, 2},
+  {"VkVideoEncodeFlagBitsKHR", VkVideoEncodeFlagBitsKHRSets, 2},
+  {"VkVideoEncodeRateControlFlagBitsKHR", VkVideoEncodeRateControlFlagBitsKHRSets, 2},
+  {"VkVideoEncodeRateControlModeFlagBitsKHR", VkVideoEncodeRateControlModeFlagBitsKHRSets, 3},
+  {"VkVideoEncodeH264CapabilityFlagBitsEXT", VkVideoEncodeH264CapabilityFlagBitsEXTSets, 11},
+  {"VkVideoEncodeH264InputModeFlagBitsEXT", VkVideoEncodeH264InputModeFlagBitsEXTSets, 3},
+  {"VkVideoEncodeH264OutputModeFlagBitsEXT", VkVideoEncodeH264OutputModeFlagBitsEXTSets, 3},
+  {"VkVideoEncodeH264CreateFlagBitsEXT", VkVideoEncodeH264CreateFlagBitsEXTSets, 2},
+  {"VkImageFormatConstraintsFlagBitsFUCHSIA", nullptr, 0},
+  {"VkImageConstraintsInfoFlagBitsFUCHSIA", VkImageConstraintsInfoFlagBitsFUCHSIASets, 5},
+  {"VkFormatFeatureFlagBits2KHR", VkFormatFeatureFlagBits2KHRSets, 27},
+  {"VkVideoEncodeH265InputModeFlagBitsEXT", VkVideoEncodeH265InputModeFlagBitsEXTSets, 3},
+  {"VkVideoEncodeH265OutputModeFlagBitsEXT", VkVideoEncodeH265OutputModeFlagBitsEXTSets, 3},
+  {"VkVideoEncodeH265CtbSizeFlagBitsEXT", VkVideoEncodeH265CtbSizeFlagBitsEXTSets, 4},
+  {"VkRenderingFlagBitsKHR", VkRenderingFlagBitsKHRSets, 3},
+}};
+
+/**
+ * @brief Removes a vendor tag from the end of the given string view
+ * @param view String view to remove the vendor tag from
+ * @return A string_view without the vendor tag, if it was suffixed
+ */
+std::string_view stripVendor(std::string_view view) {
+    for (auto const &it : vendors) {
+        // Don't strip if it's all that's left
+        if (view == it)
+            break;
+
+        if (strncmp(view.data() + view.size() - it.size(), it.data(), it.size()) == 0) {
+            view = view.substr(0, view.size() - it.size());
+            break;
+        }
+    }
+
+    return view;
+}
+
+/**
+ * @brief Strips '_BIT' from the end of a string, if there
+ */
+std::string_view stripBit(std::string_view view) {
+    if (view.size() > strlen("_BIT")) {
+        if (view.substr(view.size() - strlen("_BIT")) == "_BIT") {
+            return view.substr(0, view.size() - strlen("_BIT"));
+        }
+    }
+
+    return view;
+}
+
+std::tuple<EnumValueSet const *, EnumValueSet const *> getEnumType(std::string_view vkType) {
+    // Check for a conversion from Flags -> FlagBits
+    std::string localString;
+    if (vkType.rfind("Flags") != std::string::npos) {
+        localString = vkType;
+        auto it = localString.rfind("Flags");
+        localString = localString.replace(it, strlen("Flags"), "FlagBits");
+        vkType = localString;
+    }
+
+    // Try the original name
+    for (auto const &it : enumTypes) {
+        if (vkType == std::string_view{it.name}) {
+            if (it.data == nullptr)
+                return std::make_tuple(nullptr, nullptr);
+            return std::make_tuple(it.data, it.data + it.count);
+        }
+    }
+
+    // Try a vendor-stripped name
+    vkType = stripVendor(vkType);
+    for (auto const &it : enumTypes) {
+        if (vkType == std::string_view{it.name}) {
+            if (it.data == nullptr)
+                return std::make_tuple(nullptr, nullptr);
+            return std::make_tuple(it.data, it.data + it.count);
+        }
+    }
+
+    return std::make_tuple(nullptr, nullptr);
+}
+
+/**
+ * @brief Converts a Vulkan Flag typename into the prefix that is used for it's enums
+ * @param typeName Name of the type to generate the Vk enum prefix for
+ * @return Generated prefix string
+ *
+ * Any capitalized letters except for the first has an underscore inserted before it, an underscore
+ * is added to the end, and all characters are converted to upper case.
+ *
+ * It also removed the 'Flags' or 'FlagBits' suffixes.
+ */
+std::string processEnumPrefix(std::string_view typeName) {
+    // Flag Bits
+    std::size_t flagBitsSize = strlen("FlagBits");
+    if (typeName.size() > flagBitsSize) {
+        if (strncmp(typeName.data() + typeName.size() - flagBitsSize, "FlagBits", flagBitsSize) ==
+            0) {
+            typeName = typeName.substr(0, typeName.size() - strlen("FlagBits"));
+        }
+    }
+    // Flags
+    std::size_t flagsSize = strlen("Flags");
+    if (typeName.size() > flagsSize) {
+        if (strncmp(typeName.data() + typeName.size() - flagsSize, "Flags", flagsSize) == 0) {
+            typeName = typeName.substr(0, typeName.size() - strlen("Flags"));
+        }
+    }
+
+    std::string retStr;
+    for (auto it = typeName.begin(); it != typeName.end(); ++it) {
+        if (it == typeName.begin()) {
+            retStr += ::toupper(*it);
+        } else if (::isupper(*it)) {
+            retStr += '_';
+            retStr += *it;
+        } else {
+            retStr += toupper(*it);
+        }
+    }
+    retStr += '_';
+
+    return retStr;
+}
+
+bool findValue(std::string_view findValue,
+               std::string_view prefix,
+               uint32_t *pValue,
+               EnumValueSet const *start,
+               EnumValueSet const *end) {
+    // Remove the vendor tag suffix if it's on the value
+    findValue = stripVendor(findValue);
+    if (findValue[findValue.size() - 1] == '_')
+        findValue = findValue.substr(0, findValue.size() - 1);
+
+    // Remove '_BIT' if it's there
+    findValue = stripBit(findValue);
+
+    // Iterate until we find the value
+    while (start != end) {
+        if (findValue == start->name) {
+            *pValue |= start->value;
+            return true;
+        }
+
+        std::string prefixedName{prefix};
+        prefixedName += start->name;
+        if (findValue == prefixedName) {
+            *pValue |= start->value;
+            return true;
+        }
+
+        ++start;
+    }
+
+    return false;
+}
+
+/**
+ * @brief Takes a given string and formats it for use with parsing
+ * @param str The string to format
+ * @return Formatted string
+ *
+ * First, any non alphanumeric characters are trimmed from both ends of the string.
+ * After than, any spaces are replaced with underscores, and finally all the characters are
+ * capitalized. This will generate the string closest to the original ones found in the XML spec.
+ */
+std::string formatString(std::string str) {
+    // Trim left
+    std::size_t cutOffset = 0;
+    for (auto c : str) {
+        if (::isalnum(c))
+            break;
+        else
+            ++cutOffset;
+    }
+    str = str.substr(cutOffset);
+
+    // Trim right
+    cutOffset = 0;
+    for (std::size_t i = 0; i < str.size(); ++i) {
+        if (::isalnum(str[i]))
+            cutOffset = i + 1;
+    }
+    str = str.substr(0, cutOffset);
+
+    std::replace(str.begin(), str.end(), ' ', '_');
+    std::for_each(str.begin(), str.end(), [](char &c) { c = ::toupper(c); });
+
+    return str;
+}
+
+bool serializeBitmask(std::string_view vkType, uint32_t vkValue, std::string *pString) {
+    auto [end, start] = getEnumType(vkType);
+    --end;
+    --start;
+
+    if(start == end) {
+        // If this is a non-existing bitmask, then return an empty string
+        *pString = {};
+        return true;
+    }
+
+    std::string retStr;
+    while (start != end) {
+        if(vkValue == 0 && !retStr.empty()) {
+            break;
+        }
+        if ((start->value & vkValue) == start->value) {
+            // Found a compatible bit mask, add it
+            if (!retStr.empty()) {
+                retStr += " | ";
+            }
+            retStr += start->name;
+            vkValue = vkValue ^ start->value;
+        }
+
+        --start;
+    }
+
+    if (vkValue != 0 || retStr.empty()) {
+        // Failed to find a valid bitmask for the value
+        return false;
+    }
+
+    *pString = retStr;
+    return true;
+}
+
+bool serializeEnum(std::string_view vkType, uint32_t vkValue, std::string *pString) {
+    auto [start, end] = getEnumType(vkType);
+
+    while (start != end) {
+        if (start->value == vkValue) {
+            *pString = start->name;
+            return true;
+        }
+
+        ++start;
+    }
+
+    return false;
+}
+
+bool parseBitmask(std::string_view vkType, std::string_view vkString, uint32_t *pValue) {
+    auto [start, end] = getEnumType(vkType);
+    std::string prefix = processEnumPrefix(stripVendor(vkType));
+    uint32_t retVal = 0;
+
+    auto startCh = vkString.begin();
+    auto endCh = startCh;
+    for (; endCh != vkString.end(); ++endCh) {
+        if (*endCh == '|') {
+            std::string token(startCh, endCh);
+            token = formatString(token);
+
+            bool foundVal = findValue(token, prefix, &retVal, start, end);
+            if (!foundVal)
+                return false;
+
+            startCh = endCh + 1;
+        }
+    }
+    if (startCh != endCh) {
+        std::string token(startCh, endCh);
+        token = formatString(token);
+
+        bool foundVal = findValue(token, prefix, &retVal, start, end);
+        if (!foundVal)
+            return false;
+    }
+
+    *pValue = retVal;
+    return true;
+}
+
+bool parseEnum(std::string_view vkType, std::string_view vkString, uint32_t *pValue) {
+    auto [start, end] = getEnumType(vkType);
+    std::string prefix = processEnumPrefix(stripVendor(vkType));
+    uint32_t retVal = 0;
+
+    std::string token = formatString(std::string{vkString});
+    bool found = findValue(token, prefix, &retVal, start, end);
+    if (found) {
+        *pValue = retVal;
+    }
+    return found;
+}
+
+} // namespace
+
+bool vk_serialize(std::string_view vkType, uint32_t vkValue, std::string *pString) {
+    if (vkType.empty()) {
+        return false;
+    }
+
+    if (vkType.find("Flags") != std::string::npos || 
+        vkType.find("FlagBits") != std::string::npos) {
+        return serializeBitmask(vkType, vkValue, pString);
+    }
+
+    return serializeEnum(vkType, vkValue, pString);
+}
+
+bool vk_parse(std::string_view vkType, std::string vkString, uint32_t *pValue) {
+    if (vkType.empty()) {
+        return false;
+    }
+    if(vkString.empty()) {
+        *pValue = 0;
+        return true;
+    }
+
+    if (vkType.find("Flags") != std::string::npos || 
+        vkType.find("FlagBits") != std::string::npos) {
+        return parseBitmask(vkType, vkString, pValue);
+    }
+
+    return parseEnum(vkType, vkString, pValue);
+}
+
+#endif // VK_VALUE_SERIALIZATION_CONFIG_MAIN
+#endif // VK_VALUE_SERIALIZATION_V198_HPP
diff --git a/include/vk_equality_checks.hpp b/include/vk_equality_checks.hpp
index 8fa42eaa726fe0add910e431501179029bdd5d20..759dbf8a7660904238efe454401c6072ce606195 100644
--- a/include/vk_equality_checks.hpp
+++ b/include/vk_equality_checks.hpp
@@ -36,6 +36,9 @@
 #include <vulkan/vulkan.h>
 
 // Delegate to header specific to the local Vulkan header version
+#if VK_HEADER_VERSION == 198
+    #include "detail_equality_checks/vk_equality_checks_v198.hpp"
+#endif
 #if VK_HEADER_VERSION == 197
     #include "detail_equality_checks/vk_equality_checks_v197.hpp"
 #endif
diff --git a/include/vk_error_code.hpp b/include/vk_error_code.hpp
index 775c4f8547ba722e58418134c0170330783ff3ec..cfbe96c1f155bd2791c49e1fedcdd1f1d5b60e47 100644
--- a/include/vk_error_code.hpp
+++ b/include/vk_error_code.hpp
@@ -36,6 +36,9 @@
 #include <vulkan/vulkan.h>
 
 // Delegate to header specific to the local Vulkan header version
+#if VK_HEADER_VERSION == 198
+    #include "detail_error_code/vk_error_code_v198.hpp"
+#endif
 #if VK_HEADER_VERSION == 197
     #include "detail_error_code/vk_error_code_v197.hpp"
 #endif
diff --git a/include/vk_struct_cleanup.hpp b/include/vk_struct_cleanup.hpp
index 1998b6cd2c6094b018b55b7cab190a9f46dda816..458dc39be2b5688276995f4eece36c354528958d 100644
--- a/include/vk_struct_cleanup.hpp
+++ b/include/vk_struct_cleanup.hpp
@@ -36,6 +36,9 @@
 #include <vulkan/vulkan.h>
 
 // Delegate to header specific to the local Vulkan header version
+#if VK_HEADER_VERSION == 198
+    #include "detail_struct_cleanup/vk_struct_cleanup_v198.hpp"
+#endif
 #if VK_HEADER_VERSION == 197
     #include "detail_struct_cleanup/vk_struct_cleanup_v197.hpp"
 #endif
diff --git a/include/vk_value_serialization.hpp b/include/vk_value_serialization.hpp
index f751fcdfee81616a20295396b06746a8284c39db..d18b9b2e8d49cb576a0ea3c43b45862b75453b52 100644
--- a/include/vk_value_serialization.hpp
+++ b/include/vk_value_serialization.hpp
@@ -36,6 +36,9 @@
 #include <vulkan/vulkan.h>
 
 // Delegate to header specific to the local Vulkan header version
+#if VK_HEADER_VERSION == 198
+    #include "detail_value_serialization/vk_value_serialization_v198.hpp"
+#endif
 #if VK_HEADER_VERSION == 197
     #include "detail_value_serialization/vk_value_serialization_v197.hpp"
 #endif