#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_MAX_PHYSICAL_DEVICE_NAME_SIZE")]
pub const MAX_PHYSICAL_DEVICE_NAME_SIZE: u32 = 256;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_UUID_SIZE")]
pub const UUID_SIZE: u32 = 16;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_MAX_EXTENSION_NAME_SIZE")]
pub const MAX_EXTENSION_NAME_SIZE: u32 = 256;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_MAX_DESCRIPTION_SIZE")]
pub const MAX_DESCRIPTION_SIZE: u32 = 256;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_MAX_MEMORY_TYPES")]
pub const MAX_MEMORY_TYPES: u32 = 32;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_MAX_MEMORY_HEAPS")]
pub const MAX_MEMORY_HEAPS: u32 = 16;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_LOD_CLAMP_NONE")]
pub const LOD_CLAMP_NONE: f32 = 1000.0;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_REMAINING_MIP_LEVELS")]
pub const REMAINING_MIP_LEVELS: u32 = 4294967295;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_REMAINING_ARRAY_LAYERS")]
pub const REMAINING_ARRAY_LAYERS: u32 = 4294967295;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_WHOLE_SIZE")]
pub const WHOLE_SIZE: u64 = 18446744073709551615;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_ATTACHMENT_UNUSED")]
pub const ATTACHMENT_UNUSED: u32 = 4294967295;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_TRUE")]
pub const TRUE: u32 = 1;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_FALSE")]
pub const FALSE: u32 = 0;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_QUEUE_FAMILY_IGNORED")]
pub const QUEUE_FAMILY_IGNORED: u32 = 4294967295;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
#[doc(alias = "VK_SUBPASS_EXTERNAL")]
pub const SUBPASS_EXTERNAL: u32 = 4294967295;
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_INSTANCE: *const std::os::raw::c_char = crate::cstr!("vkCreateInstance");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_INSTANCE: *const std::os::raw::c_char = crate::cstr!("vkDestroyInstance");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_ENUMERATE_PHYSICAL_DEVICES: *const std::os::raw::c_char =
    crate::cstr!("vkEnumeratePhysicalDevices");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_DEVICE_PROC_ADDR: *const std::os::raw::c_char =
    crate::cstr!("vkGetDeviceProcAddr");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_INSTANCE_PROC_ADDR: *const std::os::raw::c_char =
    crate::cstr!("vkGetInstanceProcAddr");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_PHYSICAL_DEVICE_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkGetPhysicalDeviceProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_PHYSICAL_DEVICE_QUEUE_FAMILY_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkGetPhysicalDeviceQueueFamilyProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_PHYSICAL_DEVICE_MEMORY_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkGetPhysicalDeviceMemoryProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_PHYSICAL_DEVICE_FEATURES: *const std::os::raw::c_char =
    crate::cstr!("vkGetPhysicalDeviceFeatures");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_PHYSICAL_DEVICE_FORMAT_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkGetPhysicalDeviceFormatProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_PHYSICAL_DEVICE_IMAGE_FORMAT_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkGetPhysicalDeviceImageFormatProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_DEVICE: *const std::os::raw::c_char = crate::cstr!("vkCreateDevice");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_DEVICE: *const std::os::raw::c_char = crate::cstr!("vkDestroyDevice");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_ENUMERATE_INSTANCE_LAYER_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkEnumerateInstanceLayerProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkEnumerateInstanceExtensionProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_ENUMERATE_DEVICE_LAYER_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkEnumerateDeviceLayerProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_ENUMERATE_DEVICE_EXTENSION_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkEnumerateDeviceExtensionProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_DEVICE_QUEUE: *const std::os::raw::c_char = crate::cstr!("vkGetDeviceQueue");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_QUEUE_SUBMIT: *const std::os::raw::c_char = crate::cstr!("vkQueueSubmit");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_QUEUE_WAIT_IDLE: *const std::os::raw::c_char = crate::cstr!("vkQueueWaitIdle");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DEVICE_WAIT_IDLE: *const std::os::raw::c_char = crate::cstr!("vkDeviceWaitIdle");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_ALLOCATE_MEMORY: *const std::os::raw::c_char = crate::cstr!("vkAllocateMemory");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_FREE_MEMORY: *const std::os::raw::c_char = crate::cstr!("vkFreeMemory");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_MAP_MEMORY: *const std::os::raw::c_char = crate::cstr!("vkMapMemory");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_UNMAP_MEMORY: *const std::os::raw::c_char = crate::cstr!("vkUnmapMemory");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_FLUSH_MAPPED_MEMORY_RANGES: *const std::os::raw::c_char =
    crate::cstr!("vkFlushMappedMemoryRanges");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_INVALIDATE_MAPPED_MEMORY_RANGES: *const std::os::raw::c_char =
    crate::cstr!("vkInvalidateMappedMemoryRanges");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_DEVICE_MEMORY_COMMITMENT: *const std::os::raw::c_char =
    crate::cstr!("vkGetDeviceMemoryCommitment");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_BUFFER_MEMORY_REQUIREMENTS: *const std::os::raw::c_char =
    crate::cstr!("vkGetBufferMemoryRequirements");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_BIND_BUFFER_MEMORY: *const std::os::raw::c_char = crate::cstr!("vkBindBufferMemory");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_IMAGE_MEMORY_REQUIREMENTS: *const std::os::raw::c_char =
    crate::cstr!("vkGetImageMemoryRequirements");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_BIND_IMAGE_MEMORY: *const std::os::raw::c_char = crate::cstr!("vkBindImageMemory");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_IMAGE_SPARSE_MEMORY_REQUIREMENTS: *const std::os::raw::c_char =
    crate::cstr!("vkGetImageSparseMemoryRequirements");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_PROPERTIES: *const std::os::raw::c_char =
    crate::cstr!("vkGetPhysicalDeviceSparseImageFormatProperties");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_QUEUE_BIND_SPARSE: *const std::os::raw::c_char = crate::cstr!("vkQueueBindSparse");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_FENCE: *const std::os::raw::c_char = crate::cstr!("vkCreateFence");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_FENCE: *const std::os::raw::c_char = crate::cstr!("vkDestroyFence");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_RESET_FENCES: *const std::os::raw::c_char = crate::cstr!("vkResetFences");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_FENCE_STATUS: *const std::os::raw::c_char = crate::cstr!("vkGetFenceStatus");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_WAIT_FOR_FENCES: *const std::os::raw::c_char = crate::cstr!("vkWaitForFences");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_SEMAPHORE: *const std::os::raw::c_char = crate::cstr!("vkCreateSemaphore");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_SEMAPHORE: *const std::os::raw::c_char = crate::cstr!("vkDestroySemaphore");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_EVENT: *const std::os::raw::c_char = crate::cstr!("vkCreateEvent");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_EVENT: *const std::os::raw::c_char = crate::cstr!("vkDestroyEvent");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_EVENT_STATUS: *const std::os::raw::c_char = crate::cstr!("vkGetEventStatus");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_SET_EVENT: *const std::os::raw::c_char = crate::cstr!("vkSetEvent");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_RESET_EVENT: *const std::os::raw::c_char = crate::cstr!("vkResetEvent");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_QUERY_POOL: *const std::os::raw::c_char = crate::cstr!("vkCreateQueryPool");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_QUERY_POOL: *const std::os::raw::c_char = crate::cstr!("vkDestroyQueryPool");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_QUERY_POOL_RESULTS: *const std::os::raw::c_char =
    crate::cstr!("vkGetQueryPoolResults");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_BUFFER: *const std::os::raw::c_char = crate::cstr!("vkCreateBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_BUFFER: *const std::os::raw::c_char = crate::cstr!("vkDestroyBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_BUFFER_VIEW: *const std::os::raw::c_char = crate::cstr!("vkCreateBufferView");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_BUFFER_VIEW: *const std::os::raw::c_char = crate::cstr!("vkDestroyBufferView");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_IMAGE: *const std::os::raw::c_char = crate::cstr!("vkCreateImage");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_IMAGE: *const std::os::raw::c_char = crate::cstr!("vkDestroyImage");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_IMAGE_SUBRESOURCE_LAYOUT: *const std::os::raw::c_char =
    crate::cstr!("vkGetImageSubresourceLayout");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_IMAGE_VIEW: *const std::os::raw::c_char = crate::cstr!("vkCreateImageView");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_IMAGE_VIEW: *const std::os::raw::c_char = crate::cstr!("vkDestroyImageView");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_SHADER_MODULE: *const std::os::raw::c_char =
    crate::cstr!("vkCreateShaderModule");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_SHADER_MODULE: *const std::os::raw::c_char =
    crate::cstr!("vkDestroyShaderModule");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_PIPELINE_CACHE: *const std::os::raw::c_char =
    crate::cstr!("vkCreatePipelineCache");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_PIPELINE_CACHE: *const std::os::raw::c_char =
    crate::cstr!("vkDestroyPipelineCache");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_PIPELINE_CACHE_DATA: *const std::os::raw::c_char =
    crate::cstr!("vkGetPipelineCacheData");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_MERGE_PIPELINE_CACHES: *const std::os::raw::c_char =
    crate::cstr!("vkMergePipelineCaches");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_GRAPHICS_PIPELINES: *const std::os::raw::c_char =
    crate::cstr!("vkCreateGraphicsPipelines");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_COMPUTE_PIPELINES: *const std::os::raw::c_char =
    crate::cstr!("vkCreateComputePipelines");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_PIPELINE: *const std::os::raw::c_char = crate::cstr!("vkDestroyPipeline");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_PIPELINE_LAYOUT: *const std::os::raw::c_char =
    crate::cstr!("vkCreatePipelineLayout");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_PIPELINE_LAYOUT: *const std::os::raw::c_char =
    crate::cstr!("vkDestroyPipelineLayout");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_SAMPLER: *const std::os::raw::c_char = crate::cstr!("vkCreateSampler");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_SAMPLER: *const std::os::raw::c_char = crate::cstr!("vkDestroySampler");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_DESCRIPTOR_SET_LAYOUT: *const std::os::raw::c_char =
    crate::cstr!("vkCreateDescriptorSetLayout");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_DESCRIPTOR_SET_LAYOUT: *const std::os::raw::c_char =
    crate::cstr!("vkDestroyDescriptorSetLayout");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_DESCRIPTOR_POOL: *const std::os::raw::c_char =
    crate::cstr!("vkCreateDescriptorPool");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_DESCRIPTOR_POOL: *const std::os::raw::c_char =
    crate::cstr!("vkDestroyDescriptorPool");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_RESET_DESCRIPTOR_POOL: *const std::os::raw::c_char =
    crate::cstr!("vkResetDescriptorPool");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_ALLOCATE_DESCRIPTOR_SETS: *const std::os::raw::c_char =
    crate::cstr!("vkAllocateDescriptorSets");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_FREE_DESCRIPTOR_SETS: *const std::os::raw::c_char =
    crate::cstr!("vkFreeDescriptorSets");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_UPDATE_DESCRIPTOR_SETS: *const std::os::raw::c_char =
    crate::cstr!("vkUpdateDescriptorSets");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_FRAMEBUFFER: *const std::os::raw::c_char = crate::cstr!("vkCreateFramebuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_FRAMEBUFFER: *const std::os::raw::c_char =
    crate::cstr!("vkDestroyFramebuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_RENDER_PASS: *const std::os::raw::c_char = crate::cstr!("vkCreateRenderPass");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_RENDER_PASS: *const std::os::raw::c_char = crate::cstr!("vkDestroyRenderPass");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_GET_RENDER_AREA_GRANULARITY: *const std::os::raw::c_char =
    crate::cstr!("vkGetRenderAreaGranularity");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CREATE_COMMAND_POOL: *const std::os::raw::c_char = crate::cstr!("vkCreateCommandPool");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_DESTROY_COMMAND_POOL: *const std::os::raw::c_char =
    crate::cstr!("vkDestroyCommandPool");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_RESET_COMMAND_POOL: *const std::os::raw::c_char = crate::cstr!("vkResetCommandPool");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_ALLOCATE_COMMAND_BUFFERS: *const std::os::raw::c_char =
    crate::cstr!("vkAllocateCommandBuffers");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_FREE_COMMAND_BUFFERS: *const std::os::raw::c_char =
    crate::cstr!("vkFreeCommandBuffers");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_BEGIN_COMMAND_BUFFER: *const std::os::raw::c_char =
    crate::cstr!("vkBeginCommandBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_END_COMMAND_BUFFER: *const std::os::raw::c_char = crate::cstr!("vkEndCommandBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_RESET_COMMAND_BUFFER: *const std::os::raw::c_char =
    crate::cstr!("vkResetCommandBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_BIND_PIPELINE: *const std::os::raw::c_char = crate::cstr!("vkCmdBindPipeline");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_VIEWPORT: *const std::os::raw::c_char = crate::cstr!("vkCmdSetViewport");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_SCISSOR: *const std::os::raw::c_char = crate::cstr!("vkCmdSetScissor");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_LINE_WIDTH: *const std::os::raw::c_char = crate::cstr!("vkCmdSetLineWidth");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_DEPTH_BIAS: *const std::os::raw::c_char = crate::cstr!("vkCmdSetDepthBias");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_BLEND_CONSTANTS: *const std::os::raw::c_char =
    crate::cstr!("vkCmdSetBlendConstants");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_DEPTH_BOUNDS: *const std::os::raw::c_char =
    crate::cstr!("vkCmdSetDepthBounds");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_STENCIL_COMPARE_MASK: *const std::os::raw::c_char =
    crate::cstr!("vkCmdSetStencilCompareMask");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_STENCIL_WRITE_MASK: *const std::os::raw::c_char =
    crate::cstr!("vkCmdSetStencilWriteMask");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_STENCIL_REFERENCE: *const std::os::raw::c_char =
    crate::cstr!("vkCmdSetStencilReference");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_BIND_DESCRIPTOR_SETS: *const std::os::raw::c_char =
    crate::cstr!("vkCmdBindDescriptorSets");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_BIND_INDEX_BUFFER: *const std::os::raw::c_char =
    crate::cstr!("vkCmdBindIndexBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_BIND_VERTEX_BUFFERS: *const std::os::raw::c_char =
    crate::cstr!("vkCmdBindVertexBuffers");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_DRAW: *const std::os::raw::c_char = crate::cstr!("vkCmdDraw");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_DRAW_INDEXED: *const std::os::raw::c_char = crate::cstr!("vkCmdDrawIndexed");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_DRAW_INDIRECT: *const std::os::raw::c_char = crate::cstr!("vkCmdDrawIndirect");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_DRAW_INDEXED_INDIRECT: *const std::os::raw::c_char =
    crate::cstr!("vkCmdDrawIndexedIndirect");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_DISPATCH: *const std::os::raw::c_char = crate::cstr!("vkCmdDispatch");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_DISPATCH_INDIRECT: *const std::os::raw::c_char =
    crate::cstr!("vkCmdDispatchIndirect");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_COPY_BUFFER: *const std::os::raw::c_char = crate::cstr!("vkCmdCopyBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_COPY_IMAGE: *const std::os::raw::c_char = crate::cstr!("vkCmdCopyImage");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_BLIT_IMAGE: *const std::os::raw::c_char = crate::cstr!("vkCmdBlitImage");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_COPY_BUFFER_TO_IMAGE: *const std::os::raw::c_char =
    crate::cstr!("vkCmdCopyBufferToImage");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_COPY_IMAGE_TO_BUFFER: *const std::os::raw::c_char =
    crate::cstr!("vkCmdCopyImageToBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_UPDATE_BUFFER: *const std::os::raw::c_char = crate::cstr!("vkCmdUpdateBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_FILL_BUFFER: *const std::os::raw::c_char = crate::cstr!("vkCmdFillBuffer");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_CLEAR_COLOR_IMAGE: *const std::os::raw::c_char =
    crate::cstr!("vkCmdClearColorImage");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_CLEAR_DEPTH_STENCIL_IMAGE: *const std::os::raw::c_char =
    crate::cstr!("vkCmdClearDepthStencilImage");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_CLEAR_ATTACHMENTS: *const std::os::raw::c_char =
    crate::cstr!("vkCmdClearAttachments");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_RESOLVE_IMAGE: *const std::os::raw::c_char = crate::cstr!("vkCmdResolveImage");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_SET_EVENT: *const std::os::raw::c_char = crate::cstr!("vkCmdSetEvent");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_RESET_EVENT: *const std::os::raw::c_char = crate::cstr!("vkCmdResetEvent");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_WAIT_EVENTS: *const std::os::raw::c_char = crate::cstr!("vkCmdWaitEvents");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_PIPELINE_BARRIER: *const std::os::raw::c_char =
    crate::cstr!("vkCmdPipelineBarrier");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_BEGIN_QUERY: *const std::os::raw::c_char = crate::cstr!("vkCmdBeginQuery");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_END_QUERY: *const std::os::raw::c_char = crate::cstr!("vkCmdEndQuery");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_RESET_QUERY_POOL: *const std::os::raw::c_char =
    crate::cstr!("vkCmdResetQueryPool");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_WRITE_TIMESTAMP: *const std::os::raw::c_char = crate::cstr!("vkCmdWriteTimestamp");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_COPY_QUERY_POOL_RESULTS: *const std::os::raw::c_char =
    crate::cstr!("vkCmdCopyQueryPoolResults");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_PUSH_CONSTANTS: *const std::os::raw::c_char = crate::cstr!("vkCmdPushConstants");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_BEGIN_RENDER_PASS: *const std::os::raw::c_char =
    crate::cstr!("vkCmdBeginRenderPass");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_NEXT_SUBPASS: *const std::os::raw::c_char = crate::cstr!("vkCmdNextSubpass");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_END_RENDER_PASS: *const std::os::raw::c_char = crate::cstr!("vkCmdEndRenderPass");
#[doc = "<s>Vulkan Manual Page</s> · Constant"]
pub const FN_CMD_EXECUTE_COMMANDS: *const std::os::raw::c_char =
    crate::cstr!("vkCmdExecuteCommands");
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSampleMask.html) · Basetype"]
#[doc(alias = "VkSampleMask")]
pub type SampleMask = u32;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBool32.html) · Basetype"]
#[doc(alias = "VkBool32")]
pub type Bool32 = u32;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFlags.html) · Basetype"]
#[doc(alias = "VkFlags")]
pub type Flags = u32;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceSize.html) · Basetype"]
#[doc(alias = "VkDeviceSize")]
pub type DeviceSize = u64;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceAddress.html) · Basetype"]
#[doc(alias = "VkDeviceAddress")]
pub type DeviceAddress = u64;
crate :: dispatchable_handle ! (Instance , INSTANCE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkInstance.html) · Dispatchable Handle" , "VkInstance") ;
crate :: dispatchable_handle ! (PhysicalDevice , PHYSICAL_DEVICE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDevice.html) · Dispatchable Handle" , "VkPhysicalDevice") ;
crate :: dispatchable_handle ! (Device , DEVICE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDevice.html) · Dispatchable Handle" , "VkDevice") ;
crate :: dispatchable_handle ! (Queue , QUEUE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueue.html) · Dispatchable Handle" , "VkQueue") ;
crate :: dispatchable_handle ! (CommandBuffer , COMMAND_BUFFER , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBuffer.html) · Dispatchable Handle" , "VkCommandBuffer") ;
crate :: non_dispatchable_handle ! (DeviceMemory , DEVICE_MEMORY , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceMemory.html) · Non-dispatchable Handle" , "VkDeviceMemory") ;
crate :: non_dispatchable_handle ! (CommandPool , COMMAND_POOL , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandPool.html) · Non-dispatchable Handle" , "VkCommandPool") ;
crate :: non_dispatchable_handle ! (Buffer , BUFFER , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBuffer.html) · Non-dispatchable Handle" , "VkBuffer") ;
crate :: non_dispatchable_handle ! (BufferView , BUFFER_VIEW , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferView.html) · Non-dispatchable Handle" , "VkBufferView") ;
crate :: non_dispatchable_handle ! (Image , IMAGE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImage.html) · Non-dispatchable Handle" , "VkImage") ;
crate :: non_dispatchable_handle ! (ImageView , IMAGE_VIEW , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageView.html) · Non-dispatchable Handle" , "VkImageView") ;
crate :: non_dispatchable_handle ! (ShaderModule , SHADER_MODULE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkShaderModule.html) · Non-dispatchable Handle" , "VkShaderModule") ;
crate :: non_dispatchable_handle ! (Pipeline , PIPELINE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipeline.html) · Non-dispatchable Handle" , "VkPipeline") ;
crate :: non_dispatchable_handle ! (PipelineLayout , PIPELINE_LAYOUT , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineLayout.html) · Non-dispatchable Handle" , "VkPipelineLayout") ;
crate :: non_dispatchable_handle ! (Sampler , SAMPLER , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSampler.html) · Non-dispatchable Handle" , "VkSampler") ;
crate :: non_dispatchable_handle ! (DescriptorSet , DESCRIPTOR_SET , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSet.html) · Non-dispatchable Handle" , "VkDescriptorSet") ;
crate :: non_dispatchable_handle ! (DescriptorSetLayout , DESCRIPTOR_SET_LAYOUT , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSetLayout.html) · Non-dispatchable Handle" , "VkDescriptorSetLayout") ;
crate :: non_dispatchable_handle ! (DescriptorPool , DESCRIPTOR_POOL , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorPool.html) · Non-dispatchable Handle" , "VkDescriptorPool") ;
crate :: non_dispatchable_handle ! (Fence , FENCE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFence.html) · Non-dispatchable Handle" , "VkFence") ;
crate :: non_dispatchable_handle ! (Semaphore , SEMAPHORE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSemaphore.html) · Non-dispatchable Handle" , "VkSemaphore") ;
crate :: non_dispatchable_handle ! (Event , EVENT , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkEvent.html) · Non-dispatchable Handle" , "VkEvent") ;
crate :: non_dispatchable_handle ! (QueryPool , QUERY_POOL , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryPool.html) · Non-dispatchable Handle" , "VkQueryPool") ;
crate :: non_dispatchable_handle ! (Framebuffer , FRAMEBUFFER , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFramebuffer.html) · Non-dispatchable Handle" , "VkFramebuffer") ;
crate :: non_dispatchable_handle ! (RenderPass , RENDER_PASS , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkRenderPass.html) · Non-dispatchable Handle" , "VkRenderPass") ;
crate :: non_dispatchable_handle ! (PipelineCache , PIPELINE_CACHE , "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineCache.html) · Non-dispatchable Handle" , "VkPipelineCache") ;
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryPoolCreateFlags.html) · Bitmask of [`QueryPoolCreateFlagBits`]"] # [doc (alias = "VkQueryPoolCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct QueryPoolCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`QueryPoolCreateFlags`]"]
#[doc(alias = "VkQueryPoolCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct QueryPoolCreateFlagBits(pub u32);
impl QueryPoolCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> QueryPoolCreateFlags {
        QueryPoolCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for QueryPoolCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineLayoutCreateFlags.html) · Bitmask of [`PipelineLayoutCreateFlagBits`]"] # [doc (alias = "VkPipelineLayoutCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineLayoutCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineLayoutCreateFlags`]"]
#[doc(alias = "VkPipelineLayoutCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineLayoutCreateFlagBits(pub u32);
impl PipelineLayoutCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineLayoutCreateFlags {
        PipelineLayoutCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineLayoutCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineDepthStencilStateCreateFlags.html) · Bitmask of [`PipelineDepthStencilStateCreateFlagBits`]"] # [doc (alias = "VkPipelineDepthStencilStateCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineDepthStencilStateCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineDepthStencilStateCreateFlags`]"]
#[doc(alias = "VkPipelineDepthStencilStateCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineDepthStencilStateCreateFlagBits(pub u32);
impl PipelineDepthStencilStateCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineDepthStencilStateCreateFlags {
        PipelineDepthStencilStateCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineDepthStencilStateCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineDynamicStateCreateFlags.html) · Bitmask of [`PipelineDynamicStateCreateFlagBits`]"] # [doc (alias = "VkPipelineDynamicStateCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineDynamicStateCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineDynamicStateCreateFlags`]"]
#[doc(alias = "VkPipelineDynamicStateCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineDynamicStateCreateFlagBits(pub u32);
impl PipelineDynamicStateCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineDynamicStateCreateFlags {
        PipelineDynamicStateCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineDynamicStateCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineColorBlendStateCreateFlags.html) · Bitmask of [`PipelineColorBlendStateCreateFlagBits`]"] # [doc (alias = "VkPipelineColorBlendStateCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineColorBlendStateCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineColorBlendStateCreateFlags`]"]
#[doc(alias = "VkPipelineColorBlendStateCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineColorBlendStateCreateFlagBits(pub u32);
impl PipelineColorBlendStateCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineColorBlendStateCreateFlags {
        PipelineColorBlendStateCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineColorBlendStateCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineMultisampleStateCreateFlags.html) · Bitmask of [`PipelineMultisampleStateCreateFlagBits`]"] # [doc (alias = "VkPipelineMultisampleStateCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineMultisampleStateCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineMultisampleStateCreateFlags`]"]
#[doc(alias = "VkPipelineMultisampleStateCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineMultisampleStateCreateFlagBits(pub u32);
impl PipelineMultisampleStateCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineMultisampleStateCreateFlags {
        PipelineMultisampleStateCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineMultisampleStateCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineRasterizationStateCreateFlags.html) · Bitmask of [`PipelineRasterizationStateCreateFlagBits`]"] # [doc (alias = "VkPipelineRasterizationStateCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineRasterizationStateCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineRasterizationStateCreateFlags`]"]
#[doc(alias = "VkPipelineRasterizationStateCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineRasterizationStateCreateFlagBits(pub u32);
impl PipelineRasterizationStateCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineRasterizationStateCreateFlags {
        PipelineRasterizationStateCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineRasterizationStateCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineViewportStateCreateFlags.html) · Bitmask of [`PipelineViewportStateCreateFlagBits`]"] # [doc (alias = "VkPipelineViewportStateCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineViewportStateCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineViewportStateCreateFlags`]"]
#[doc(alias = "VkPipelineViewportStateCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineViewportStateCreateFlagBits(pub u32);
impl PipelineViewportStateCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineViewportStateCreateFlags {
        PipelineViewportStateCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineViewportStateCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineTessellationStateCreateFlags.html) · Bitmask of [`PipelineTessellationStateCreateFlagBits`]"] # [doc (alias = "VkPipelineTessellationStateCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineTessellationStateCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineTessellationStateCreateFlags`]"]
#[doc(alias = "VkPipelineTessellationStateCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineTessellationStateCreateFlagBits(pub u32);
impl PipelineTessellationStateCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineTessellationStateCreateFlags {
        PipelineTessellationStateCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineTessellationStateCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineInputAssemblyStateCreateFlags.html) · Bitmask of [`PipelineInputAssemblyStateCreateFlagBits`]"] # [doc (alias = "VkPipelineInputAssemblyStateCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineInputAssemblyStateCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineInputAssemblyStateCreateFlags`]"]
#[doc(alias = "VkPipelineInputAssemblyStateCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineInputAssemblyStateCreateFlagBits(pub u32);
impl PipelineInputAssemblyStateCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineInputAssemblyStateCreateFlags {
        PipelineInputAssemblyStateCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineInputAssemblyStateCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineVertexInputStateCreateFlags.html) · Bitmask of [`PipelineVertexInputStateCreateFlagBits`]"] # [doc (alias = "VkPipelineVertexInputStateCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineVertexInputStateCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`PipelineVertexInputStateCreateFlags`]"]
#[doc(alias = "VkPipelineVertexInputStateCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineVertexInputStateCreateFlagBits(pub u32);
impl PipelineVertexInputStateCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineVertexInputStateCreateFlags {
        PipelineVertexInputStateCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineVertexInputStateCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferViewCreateFlags.html) · Bitmask of [`BufferViewCreateFlagBits`]"] # [doc (alias = "VkBufferViewCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct BufferViewCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`BufferViewCreateFlags`]"]
#[doc(alias = "VkBufferViewCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct BufferViewCreateFlagBits(pub u32);
impl BufferViewCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> BufferViewCreateFlags {
        BufferViewCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for BufferViewCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkInstanceCreateFlags.html) · Bitmask of [`InstanceCreateFlagBits`]"] # [doc (alias = "VkInstanceCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct InstanceCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`InstanceCreateFlags`]"]
#[doc(alias = "VkInstanceCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct InstanceCreateFlagBits(pub u32);
impl InstanceCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> InstanceCreateFlags {
        InstanceCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for InstanceCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceCreateFlags.html) · Bitmask of [`DeviceCreateFlagBits`]"] # [doc (alias = "VkDeviceCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct DeviceCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`DeviceCreateFlags`]"]
#[doc(alias = "VkDeviceCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct DeviceCreateFlagBits(pub u32);
impl DeviceCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> DeviceCreateFlags {
        DeviceCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for DeviceCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSemaphoreCreateFlags.html) · Bitmask of [`SemaphoreCreateFlagBits`]"] # [doc (alias = "VkSemaphoreCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct SemaphoreCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`SemaphoreCreateFlags`]"]
#[doc(alias = "VkSemaphoreCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SemaphoreCreateFlagBits(pub u32);
impl SemaphoreCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> SemaphoreCreateFlags {
        SemaphoreCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for SemaphoreCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkEventCreateFlags.html) · Bitmask of [`EventCreateFlagBits`]"] # [doc (alias = "VkEventCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct EventCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`EventCreateFlags`]"]
#[doc(alias = "VkEventCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct EventCreateFlagBits(pub u32);
impl EventCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> EventCreateFlags {
        EventCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for EventCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryMapFlags.html) · Bitmask of [`MemoryMapFlagBits`]"] # [doc (alias = "VkMemoryMapFlags")] # [derive (Default)] # [repr (transparent)] pub struct MemoryMapFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`MemoryMapFlags`]"]
#[doc(alias = "VkMemoryMapFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct MemoryMapFlagBits(pub u32);
impl MemoryMapFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> MemoryMapFlags {
        MemoryMapFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for MemoryMapFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorPoolResetFlags.html) · Bitmask of [`DescriptorPoolResetFlagBits`]"] # [doc (alias = "VkDescriptorPoolResetFlags")] # [derive (Default)] # [repr (transparent)] pub struct DescriptorPoolResetFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`DescriptorPoolResetFlags`]"]
#[doc(alias = "VkDescriptorPoolResetFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct DescriptorPoolResetFlagBits(pub u32);
impl DescriptorPoolResetFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> DescriptorPoolResetFlags {
        DescriptorPoolResetFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for DescriptorPoolResetFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAttachmentLoadOp.html) · Enum"]
#[doc(alias = "VkAttachmentLoadOp")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct AttachmentLoadOp(pub i32);
impl std::fmt::Debug for AttachmentLoadOp {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::LOAD => "LOAD",
            &Self::CLEAR => "CLEAR",
            &Self::DONT_CARE => "DONT_CARE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl AttachmentLoadOp {
    pub const LOAD: Self = Self(0);
    pub const CLEAR: Self = Self(1);
    pub const DONT_CARE: Self = Self(2);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAttachmentStoreOp.html) · Enum"]
#[doc(alias = "VkAttachmentStoreOp")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct AttachmentStoreOp(pub i32);
impl std::fmt::Debug for AttachmentStoreOp {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::STORE => "STORE",
            &Self::DONT_CARE => "DONT_CARE",
            &Self::NONE_QCOM => "NONE_QCOM",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl AttachmentStoreOp {
    pub const STORE: Self = Self(0);
    pub const DONT_CARE: Self = Self(1);
}
#[doc = "Provided by [`crate::extensions::qcom_render_pass_store_ops`]"]
impl AttachmentStoreOp {
    pub const NONE_QCOM: Self = Self(1000301000);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBlendFactor.html) · Enum"]
#[doc(alias = "VkBlendFactor")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct BlendFactor(pub i32);
impl std::fmt::Debug for BlendFactor {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::ZERO => "ZERO",
            &Self::ONE => "ONE",
            &Self::SRC_COLOR => "SRC_COLOR",
            &Self::ONE_MINUS_SRC_COLOR => "ONE_MINUS_SRC_COLOR",
            &Self::DST_COLOR => "DST_COLOR",
            &Self::ONE_MINUS_DST_COLOR => "ONE_MINUS_DST_COLOR",
            &Self::SRC_ALPHA => "SRC_ALPHA",
            &Self::ONE_MINUS_SRC_ALPHA => "ONE_MINUS_SRC_ALPHA",
            &Self::DST_ALPHA => "DST_ALPHA",
            &Self::ONE_MINUS_DST_ALPHA => "ONE_MINUS_DST_ALPHA",
            &Self::CONSTANT_COLOR => "CONSTANT_COLOR",
            &Self::ONE_MINUS_CONSTANT_COLOR => "ONE_MINUS_CONSTANT_COLOR",
            &Self::CONSTANT_ALPHA => "CONSTANT_ALPHA",
            &Self::ONE_MINUS_CONSTANT_ALPHA => "ONE_MINUS_CONSTANT_ALPHA",
            &Self::SRC_ALPHA_SATURATE => "SRC_ALPHA_SATURATE",
            &Self::SRC1_COLOR => "SRC1_COLOR",
            &Self::ONE_MINUS_SRC1_COLOR => "ONE_MINUS_SRC1_COLOR",
            &Self::SRC1_ALPHA => "SRC1_ALPHA",
            &Self::ONE_MINUS_SRC1_ALPHA => "ONE_MINUS_SRC1_ALPHA",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl BlendFactor {
    pub const ZERO: Self = Self(0);
    pub const ONE: Self = Self(1);
    pub const SRC_COLOR: Self = Self(2);
    pub const ONE_MINUS_SRC_COLOR: Self = Self(3);
    pub const DST_COLOR: Self = Self(4);
    pub const ONE_MINUS_DST_COLOR: Self = Self(5);
    pub const SRC_ALPHA: Self = Self(6);
    pub const ONE_MINUS_SRC_ALPHA: Self = Self(7);
    pub const DST_ALPHA: Self = Self(8);
    pub const ONE_MINUS_DST_ALPHA: Self = Self(9);
    pub const CONSTANT_COLOR: Self = Self(10);
    pub const ONE_MINUS_CONSTANT_COLOR: Self = Self(11);
    pub const CONSTANT_ALPHA: Self = Self(12);
    pub const ONE_MINUS_CONSTANT_ALPHA: Self = Self(13);
    pub const SRC_ALPHA_SATURATE: Self = Self(14);
    pub const SRC1_COLOR: Self = Self(15);
    pub const ONE_MINUS_SRC1_COLOR: Self = Self(16);
    pub const SRC1_ALPHA: Self = Self(17);
    pub const ONE_MINUS_SRC1_ALPHA: Self = Self(18);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBlendOp.html) · Enum"]
#[doc(alias = "VkBlendOp")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct BlendOp(pub i32);
impl std::fmt::Debug for BlendOp {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::ADD => "ADD",
            &Self::SUBTRACT => "SUBTRACT",
            &Self::REVERSE_SUBTRACT => "REVERSE_SUBTRACT",
            &Self::MIN => "MIN",
            &Self::MAX => "MAX",
            &Self::ZERO_EXT => "ZERO_EXT",
            &Self::SRC_EXT => "SRC_EXT",
            &Self::DST_EXT => "DST_EXT",
            &Self::SRC_OVER_EXT => "SRC_OVER_EXT",
            &Self::DST_OVER_EXT => "DST_OVER_EXT",
            &Self::SRC_IN_EXT => "SRC_IN_EXT",
            &Self::DST_IN_EXT => "DST_IN_EXT",
            &Self::SRC_OUT_EXT => "SRC_OUT_EXT",
            &Self::DST_OUT_EXT => "DST_OUT_EXT",
            &Self::SRC_ATOP_EXT => "SRC_ATOP_EXT",
            &Self::DST_ATOP_EXT => "DST_ATOP_EXT",
            &Self::XOR_EXT => "XOR_EXT",
            &Self::MULTIPLY_EXT => "MULTIPLY_EXT",
            &Self::SCREEN_EXT => "SCREEN_EXT",
            &Self::OVERLAY_EXT => "OVERLAY_EXT",
            &Self::DARKEN_EXT => "DARKEN_EXT",
            &Self::LIGHTEN_EXT => "LIGHTEN_EXT",
            &Self::COLORDODGE_EXT => "COLORDODGE_EXT",
            &Self::COLORBURN_EXT => "COLORBURN_EXT",
            &Self::HARDLIGHT_EXT => "HARDLIGHT_EXT",
            &Self::SOFTLIGHT_EXT => "SOFTLIGHT_EXT",
            &Self::DIFFERENCE_EXT => "DIFFERENCE_EXT",
            &Self::EXCLUSION_EXT => "EXCLUSION_EXT",
            &Self::INVERT_EXT => "INVERT_EXT",
            &Self::INVERT_RGB_EXT => "INVERT_RGB_EXT",
            &Self::LINEARDODGE_EXT => "LINEARDODGE_EXT",
            &Self::LINEARBURN_EXT => "LINEARBURN_EXT",
            &Self::VIVIDLIGHT_EXT => "VIVIDLIGHT_EXT",
            &Self::LINEARLIGHT_EXT => "LINEARLIGHT_EXT",
            &Self::PINLIGHT_EXT => "PINLIGHT_EXT",
            &Self::HARDMIX_EXT => "HARDMIX_EXT",
            &Self::HSL_HUE_EXT => "HSL_HUE_EXT",
            &Self::HSL_SATURATION_EXT => "HSL_SATURATION_EXT",
            &Self::HSL_COLOR_EXT => "HSL_COLOR_EXT",
            &Self::HSL_LUMINOSITY_EXT => "HSL_LUMINOSITY_EXT",
            &Self::PLUS_EXT => "PLUS_EXT",
            &Self::PLUS_CLAMPED_EXT => "PLUS_CLAMPED_EXT",
            &Self::PLUS_CLAMPED_ALPHA_EXT => "PLUS_CLAMPED_ALPHA_EXT",
            &Self::PLUS_DARKER_EXT => "PLUS_DARKER_EXT",
            &Self::MINUS_EXT => "MINUS_EXT",
            &Self::MINUS_CLAMPED_EXT => "MINUS_CLAMPED_EXT",
            &Self::CONTRAST_EXT => "CONTRAST_EXT",
            &Self::INVERT_OVG_EXT => "INVERT_OVG_EXT",
            &Self::RED_EXT => "RED_EXT",
            &Self::GREEN_EXT => "GREEN_EXT",
            &Self::BLUE_EXT => "BLUE_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl BlendOp {
    pub const ADD: Self = Self(0);
    pub const SUBTRACT: Self = Self(1);
    pub const REVERSE_SUBTRACT: Self = Self(2);
    pub const MIN: Self = Self(3);
    pub const MAX: Self = Self(4);
}
#[doc = "Provided by [`crate::extensions::ext_blend_operation_advanced`]"]
impl BlendOp {
    pub const ZERO_EXT: Self = Self(1000148000);
    pub const SRC_EXT: Self = Self(1000148001);
    pub const DST_EXT: Self = Self(1000148002);
    pub const SRC_OVER_EXT: Self = Self(1000148003);
    pub const DST_OVER_EXT: Self = Self(1000148004);
    pub const SRC_IN_EXT: Self = Self(1000148005);
    pub const DST_IN_EXT: Self = Self(1000148006);
    pub const SRC_OUT_EXT: Self = Self(1000148007);
    pub const DST_OUT_EXT: Self = Self(1000148008);
    pub const SRC_ATOP_EXT: Self = Self(1000148009);
    pub const DST_ATOP_EXT: Self = Self(1000148010);
    pub const XOR_EXT: Self = Self(1000148011);
    pub const MULTIPLY_EXT: Self = Self(1000148012);
    pub const SCREEN_EXT: Self = Self(1000148013);
    pub const OVERLAY_EXT: Self = Self(1000148014);
    pub const DARKEN_EXT: Self = Self(1000148015);
    pub const LIGHTEN_EXT: Self = Self(1000148016);
    pub const COLORDODGE_EXT: Self = Self(1000148017);
    pub const COLORBURN_EXT: Self = Self(1000148018);
    pub const HARDLIGHT_EXT: Self = Self(1000148019);
    pub const SOFTLIGHT_EXT: Self = Self(1000148020);
    pub const DIFFERENCE_EXT: Self = Self(1000148021);
    pub const EXCLUSION_EXT: Self = Self(1000148022);
    pub const INVERT_EXT: Self = Self(1000148023);
    pub const INVERT_RGB_EXT: Self = Self(1000148024);
    pub const LINEARDODGE_EXT: Self = Self(1000148025);
    pub const LINEARBURN_EXT: Self = Self(1000148026);
    pub const VIVIDLIGHT_EXT: Self = Self(1000148027);
    pub const LINEARLIGHT_EXT: Self = Self(1000148028);
    pub const PINLIGHT_EXT: Self = Self(1000148029);
    pub const HARDMIX_EXT: Self = Self(1000148030);
    pub const HSL_HUE_EXT: Self = Self(1000148031);
    pub const HSL_SATURATION_EXT: Self = Self(1000148032);
    pub const HSL_COLOR_EXT: Self = Self(1000148033);
    pub const HSL_LUMINOSITY_EXT: Self = Self(1000148034);
    pub const PLUS_EXT: Self = Self(1000148035);
    pub const PLUS_CLAMPED_EXT: Self = Self(1000148036);
    pub const PLUS_CLAMPED_ALPHA_EXT: Self = Self(1000148037);
    pub const PLUS_DARKER_EXT: Self = Self(1000148038);
    pub const MINUS_EXT: Self = Self(1000148039);
    pub const MINUS_CLAMPED_EXT: Self = Self(1000148040);
    pub const CONTRAST_EXT: Self = Self(1000148041);
    pub const INVERT_OVG_EXT: Self = Self(1000148042);
    pub const RED_EXT: Self = Self(1000148043);
    pub const GREEN_EXT: Self = Self(1000148044);
    pub const BLUE_EXT: Self = Self(1000148045);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBorderColor.html) · Enum"]
#[doc(alias = "VkBorderColor")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct BorderColor(pub i32);
impl std::fmt::Debug for BorderColor {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::FLOAT_TRANSPARENT_BLACK => "FLOAT_TRANSPARENT_BLACK",
            &Self::INT_TRANSPARENT_BLACK => "INT_TRANSPARENT_BLACK",
            &Self::FLOAT_OPAQUE_BLACK => "FLOAT_OPAQUE_BLACK",
            &Self::INT_OPAQUE_BLACK => "INT_OPAQUE_BLACK",
            &Self::FLOAT_OPAQUE_WHITE => "FLOAT_OPAQUE_WHITE",
            &Self::INT_OPAQUE_WHITE => "INT_OPAQUE_WHITE",
            &Self::FLOAT_CUSTOM_EXT => "FLOAT_CUSTOM_EXT",
            &Self::INT_CUSTOM_EXT => "INT_CUSTOM_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl BorderColor {
    pub const FLOAT_TRANSPARENT_BLACK: Self = Self(0);
    pub const INT_TRANSPARENT_BLACK: Self = Self(1);
    pub const FLOAT_OPAQUE_BLACK: Self = Self(2);
    pub const INT_OPAQUE_BLACK: Self = Self(3);
    pub const FLOAT_OPAQUE_WHITE: Self = Self(4);
    pub const INT_OPAQUE_WHITE: Self = Self(5);
}
#[doc = "Provided by [`crate::extensions::ext_custom_border_color`]"]
impl BorderColor {
    pub const FLOAT_CUSTOM_EXT: Self = Self(1000287003);
    pub const INT_CUSTOM_EXT: Self = Self(1000287004);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFramebufferCreateFlags.html) · Bitmask of [`FramebufferCreateFlagBits`]"] # [doc (alias = "VkFramebufferCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct FramebufferCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const IMAGELESS = FramebufferCreateFlagBits :: IMAGELESS . 0 ; const IMAGELESS_KHR = FramebufferCreateFlagBits :: IMAGELESS_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFramebufferCreateFlagBits.html) · Bits enum of [`FramebufferCreateFlags`]"]
#[doc(alias = "VkFramebufferCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct FramebufferCreateFlagBits(pub u32);
impl FramebufferCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> FramebufferCreateFlags {
        FramebufferCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for FramebufferCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::IMAGELESS => "IMAGELESS",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl FramebufferCreateFlagBits {
    pub const IMAGELESS: Self = Self(1);
}
#[doc = "Provided by [`crate::extensions::khr_imageless_framebuffer`]"]
impl FramebufferCreateFlagBits {
    pub const IMAGELESS_KHR: Self = Self::IMAGELESS;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkRenderPassCreateFlags.html) · Bitmask of [`RenderPassCreateFlagBits`]"] # [doc (alias = "VkRenderPassCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct RenderPassCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const TRANSFORM_QCOM = RenderPassCreateFlagBits :: TRANSFORM_QCOM . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkRenderPassCreateFlagBits.html) · Bits enum of [`RenderPassCreateFlags`]"]
#[doc(alias = "VkRenderPassCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct RenderPassCreateFlagBits(pub u32);
impl RenderPassCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> RenderPassCreateFlags {
        RenderPassCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for RenderPassCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::TRANSFORM_QCOM => "TRANSFORM_QCOM",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::extensions::qcom_render_pass_transform`]"]
impl RenderPassCreateFlagBits {
    pub const TRANSFORM_QCOM: Self = Self(2);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSamplerCreateFlags.html) · Bitmask of [`SamplerCreateFlagBits`]"] # [doc (alias = "VkSamplerCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct SamplerCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const SUBSAMPLED_EXT = SamplerCreateFlagBits :: SUBSAMPLED_EXT . 0 ; const SUBSAMPLED_COARSE_RECONSTRUCTION_EXT = SamplerCreateFlagBits :: SUBSAMPLED_COARSE_RECONSTRUCTION_EXT . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSamplerCreateFlagBits.html) · Bits enum of [`SamplerCreateFlags`]"]
#[doc(alias = "VkSamplerCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SamplerCreateFlagBits(pub u32);
impl SamplerCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> SamplerCreateFlags {
        SamplerCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for SamplerCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::SUBSAMPLED_EXT => "SUBSAMPLED_EXT",
            &Self::SUBSAMPLED_COARSE_RECONSTRUCTION_EXT => "SUBSAMPLED_COARSE_RECONSTRUCTION_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map`]"]
impl SamplerCreateFlagBits {
    pub const SUBSAMPLED_EXT: Self = Self(1);
    pub const SUBSAMPLED_COARSE_RECONSTRUCTION_EXT: Self = Self(2);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineCacheHeaderVersion.html) · Enum"]
#[doc(alias = "VkPipelineCacheHeaderVersion")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineCacheHeaderVersion(pub i32);
impl std::fmt::Debug for PipelineCacheHeaderVersion {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::ONE => "ONE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl PipelineCacheHeaderVersion {
    pub const ONE: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineCacheCreateFlags.html) · Bitmask of [`PipelineCacheCreateFlagBits`]"] # [doc (alias = "VkPipelineCacheCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineCacheCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const EXTERNALLY_SYNCHRONIZED_EXT = PipelineCacheCreateFlagBits :: EXTERNALLY_SYNCHRONIZED_EXT . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineCacheCreateFlagBits.html) · Bits enum of [`PipelineCacheCreateFlags`]"]
#[doc(alias = "VkPipelineCacheCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineCacheCreateFlagBits(pub u32);
impl PipelineCacheCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineCacheCreateFlags {
        PipelineCacheCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineCacheCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::EXTERNALLY_SYNCHRONIZED_EXT => "EXTERNALLY_SYNCHRONIZED_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::extensions::ext_pipeline_creation_cache_control`]"]
impl PipelineCacheCreateFlagBits {
    pub const EXTERNALLY_SYNCHRONIZED_EXT: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineShaderStageCreateFlags.html) · Bitmask of [`PipelineShaderStageCreateFlagBits`]"] # [doc (alias = "VkPipelineShaderStageCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineShaderStageCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const ALLOW_VARYING_SUBGROUP_SIZE_EXT = PipelineShaderStageCreateFlagBits :: ALLOW_VARYING_SUBGROUP_SIZE_EXT . 0 ; const REQUIRE_FULL_SUBGROUPS_EXT = PipelineShaderStageCreateFlagBits :: REQUIRE_FULL_SUBGROUPS_EXT . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineShaderStageCreateFlagBits.html) · Bits enum of [`PipelineShaderStageCreateFlags`]"]
#[doc(alias = "VkPipelineShaderStageCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineShaderStageCreateFlagBits(pub u32);
impl PipelineShaderStageCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineShaderStageCreateFlags {
        PipelineShaderStageCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineShaderStageCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::ALLOW_VARYING_SUBGROUP_SIZE_EXT => "ALLOW_VARYING_SUBGROUP_SIZE_EXT",
            &Self::REQUIRE_FULL_SUBGROUPS_EXT => "REQUIRE_FULL_SUBGROUPS_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::extensions::ext_subgroup_size_control`]"]
impl PipelineShaderStageCreateFlagBits {
    pub const ALLOW_VARYING_SUBGROUP_SIZE_EXT: Self = Self(1);
    pub const REQUIRE_FULL_SUBGROUPS_EXT: Self = Self(2);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSetLayoutCreateFlags.html) · Bitmask of [`DescriptorSetLayoutCreateFlagBits`]"] # [doc (alias = "VkDescriptorSetLayoutCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct DescriptorSetLayoutCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const UPDATE_AFTER_BIND_POOL = DescriptorSetLayoutCreateFlagBits :: UPDATE_AFTER_BIND_POOL . 0 ; const PUSH_DESCRIPTOR_KHR = DescriptorSetLayoutCreateFlagBits :: PUSH_DESCRIPTOR_KHR . 0 ; const HOST_ONLY_POOL_VALVE = DescriptorSetLayoutCreateFlagBits :: HOST_ONLY_POOL_VALVE . 0 ; const UPDATE_AFTER_BIND_POOL_EXT = DescriptorSetLayoutCreateFlagBits :: UPDATE_AFTER_BIND_POOL_EXT . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSetLayoutCreateFlagBits.html) · Bits enum of [`DescriptorSetLayoutCreateFlags`]"]
#[doc(alias = "VkDescriptorSetLayoutCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct DescriptorSetLayoutCreateFlagBits(pub u32);
impl DescriptorSetLayoutCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> DescriptorSetLayoutCreateFlags {
        DescriptorSetLayoutCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for DescriptorSetLayoutCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::UPDATE_AFTER_BIND_POOL => "UPDATE_AFTER_BIND_POOL",
            &Self::PUSH_DESCRIPTOR_KHR => "PUSH_DESCRIPTOR_KHR",
            &Self::HOST_ONLY_POOL_VALVE => "HOST_ONLY_POOL_VALVE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl DescriptorSetLayoutCreateFlagBits {
    pub const UPDATE_AFTER_BIND_POOL: Self = Self(2);
}
#[doc = "Provided by [`crate::extensions::khr_push_descriptor`]"]
impl DescriptorSetLayoutCreateFlagBits {
    pub const PUSH_DESCRIPTOR_KHR: Self = Self(1);
}
#[doc = "Provided by [`crate::extensions::valve_mutable_descriptor_type`]"]
impl DescriptorSetLayoutCreateFlagBits {
    pub const HOST_ONLY_POOL_VALVE: Self = Self(4);
}
#[doc = "Provided by [`crate::extensions::ext_descriptor_indexing`]"]
impl DescriptorSetLayoutCreateFlagBits {
    pub const UPDATE_AFTER_BIND_POOL_EXT: Self = Self::UPDATE_AFTER_BIND_POOL;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceQueueCreateFlags.html) · Bitmask of [`DeviceQueueCreateFlagBits`]"] # [doc (alias = "VkDeviceQueueCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct DeviceQueueCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const PROTECTED = DeviceQueueCreateFlagBits :: PROTECTED . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceQueueCreateFlagBits.html) · Bits enum of [`DeviceQueueCreateFlags`]"]
#[doc(alias = "VkDeviceQueueCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct DeviceQueueCreateFlagBits(pub u32);
impl DeviceQueueCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> DeviceQueueCreateFlags {
        DeviceQueueCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for DeviceQueueCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::PROTECTED => "PROTECTED",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl DeviceQueueCreateFlagBits {
    pub const PROTECTED: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferCreateFlags.html) · Bitmask of [`BufferCreateFlagBits`]"] # [doc (alias = "VkBufferCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct BufferCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const SPARSE_BINDING = BufferCreateFlagBits :: SPARSE_BINDING . 0 ; const SPARSE_RESIDENCY = BufferCreateFlagBits :: SPARSE_RESIDENCY . 0 ; const SPARSE_ALIASED = BufferCreateFlagBits :: SPARSE_ALIASED . 0 ; const PROTECTED = BufferCreateFlagBits :: PROTECTED . 0 ; const DEVICE_ADDRESS_CAPTURE_REPLAY = BufferCreateFlagBits :: DEVICE_ADDRESS_CAPTURE_REPLAY . 0 ; const DEVICE_ADDRESS_CAPTURE_REPLAY_EXT = BufferCreateFlagBits :: DEVICE_ADDRESS_CAPTURE_REPLAY_EXT . 0 ; const DEVICE_ADDRESS_CAPTURE_REPLAY_KHR = BufferCreateFlagBits :: DEVICE_ADDRESS_CAPTURE_REPLAY_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferCreateFlagBits.html) · Bits enum of [`BufferCreateFlags`]"]
#[doc(alias = "VkBufferCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct BufferCreateFlagBits(pub u32);
impl BufferCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> BufferCreateFlags {
        BufferCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for BufferCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::SPARSE_BINDING => "SPARSE_BINDING",
            &Self::SPARSE_RESIDENCY => "SPARSE_RESIDENCY",
            &Self::SPARSE_ALIASED => "SPARSE_ALIASED",
            &Self::PROTECTED => "PROTECTED",
            &Self::DEVICE_ADDRESS_CAPTURE_REPLAY => "DEVICE_ADDRESS_CAPTURE_REPLAY",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl BufferCreateFlagBits {
    pub const SPARSE_BINDING: Self = Self(1);
    pub const SPARSE_RESIDENCY: Self = Self(2);
    pub const SPARSE_ALIASED: Self = Self(4);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl BufferCreateFlagBits {
    pub const PROTECTED: Self = Self(8);
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl BufferCreateFlagBits {
    pub const DEVICE_ADDRESS_CAPTURE_REPLAY: Self = Self(16);
}
#[doc = "Provided by [`crate::extensions::ext_buffer_device_address`]"]
impl BufferCreateFlagBits {
    pub const DEVICE_ADDRESS_CAPTURE_REPLAY_EXT: Self = Self::DEVICE_ADDRESS_CAPTURE_REPLAY;
}
#[doc = "Provided by [`crate::extensions::khr_buffer_device_address`]"]
impl BufferCreateFlagBits {
    pub const DEVICE_ADDRESS_CAPTURE_REPLAY_KHR: Self = Self::DEVICE_ADDRESS_CAPTURE_REPLAY;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferUsageFlags.html) · Bitmask of [`BufferUsageFlagBits`]"] # [doc (alias = "VkBufferUsageFlags")] # [derive (Default)] # [repr (transparent)] pub struct BufferUsageFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const TRANSFER_SRC = BufferUsageFlagBits :: TRANSFER_SRC . 0 ; const TRANSFER_DST = BufferUsageFlagBits :: TRANSFER_DST . 0 ; const UNIFORM_TEXEL_BUFFER = BufferUsageFlagBits :: UNIFORM_TEXEL_BUFFER . 0 ; const STORAGE_TEXEL_BUFFER = BufferUsageFlagBits :: STORAGE_TEXEL_BUFFER . 0 ; const UNIFORM_BUFFER = BufferUsageFlagBits :: UNIFORM_BUFFER . 0 ; const STORAGE_BUFFER = BufferUsageFlagBits :: STORAGE_BUFFER . 0 ; const INDEX_BUFFER = BufferUsageFlagBits :: INDEX_BUFFER . 0 ; const VERTEX_BUFFER = BufferUsageFlagBits :: VERTEX_BUFFER . 0 ; const INDIRECT_BUFFER = BufferUsageFlagBits :: INDIRECT_BUFFER . 0 ; const SHADER_DEVICE_ADDRESS = BufferUsageFlagBits :: SHADER_DEVICE_ADDRESS . 0 ; const TRANSFORM_FEEDBACK_BUFFER_EXT = BufferUsageFlagBits :: TRANSFORM_FEEDBACK_BUFFER_EXT . 0 ; const TRANSFORM_FEEDBACK_COUNTER_BUFFER_EXT = BufferUsageFlagBits :: TRANSFORM_FEEDBACK_COUNTER_BUFFER_EXT . 0 ; const CONDITIONAL_RENDERING_EXT = BufferUsageFlagBits :: CONDITIONAL_RENDERING_EXT . 0 ; const ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_KHR = BufferUsageFlagBits :: ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_KHR . 0 ; const ACCELERATION_STRUCTURE_STORAGE_KHR = BufferUsageFlagBits :: ACCELERATION_STRUCTURE_STORAGE_KHR . 0 ; const SHADER_BINDING_TABLE_KHR = BufferUsageFlagBits :: SHADER_BINDING_TABLE_KHR . 0 ; const RAY_TRACING_NV = BufferUsageFlagBits :: RAY_TRACING_NV . 0 ; const SHADER_DEVICE_ADDRESS_EXT = BufferUsageFlagBits :: SHADER_DEVICE_ADDRESS_EXT . 0 ; const SHADER_DEVICE_ADDRESS_KHR = BufferUsageFlagBits :: SHADER_DEVICE_ADDRESS_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferUsageFlagBits.html) · Bits enum of [`BufferUsageFlags`]"]
#[doc(alias = "VkBufferUsageFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct BufferUsageFlagBits(pub u32);
impl BufferUsageFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> BufferUsageFlags {
        BufferUsageFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for BufferUsageFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::TRANSFER_SRC => "TRANSFER_SRC",
            &Self::TRANSFER_DST => "TRANSFER_DST",
            &Self::UNIFORM_TEXEL_BUFFER => "UNIFORM_TEXEL_BUFFER",
            &Self::STORAGE_TEXEL_BUFFER => "STORAGE_TEXEL_BUFFER",
            &Self::UNIFORM_BUFFER => "UNIFORM_BUFFER",
            &Self::STORAGE_BUFFER => "STORAGE_BUFFER",
            &Self::INDEX_BUFFER => "INDEX_BUFFER",
            &Self::VERTEX_BUFFER => "VERTEX_BUFFER",
            &Self::INDIRECT_BUFFER => "INDIRECT_BUFFER",
            &Self::SHADER_DEVICE_ADDRESS => "SHADER_DEVICE_ADDRESS",
            &Self::TRANSFORM_FEEDBACK_BUFFER_EXT => "TRANSFORM_FEEDBACK_BUFFER_EXT",
            &Self::TRANSFORM_FEEDBACK_COUNTER_BUFFER_EXT => "TRANSFORM_FEEDBACK_COUNTER_BUFFER_EXT",
            &Self::CONDITIONAL_RENDERING_EXT => "CONDITIONAL_RENDERING_EXT",
            &Self::ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_KHR => {
                "ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_STORAGE_KHR => "ACCELERATION_STRUCTURE_STORAGE_KHR",
            &Self::SHADER_BINDING_TABLE_KHR => "SHADER_BINDING_TABLE_KHR",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl BufferUsageFlagBits {
    pub const TRANSFER_SRC: Self = Self(1);
    pub const TRANSFER_DST: Self = Self(2);
    pub const UNIFORM_TEXEL_BUFFER: Self = Self(4);
    pub const STORAGE_TEXEL_BUFFER: Self = Self(8);
    pub const UNIFORM_BUFFER: Self = Self(16);
    pub const STORAGE_BUFFER: Self = Self(32);
    pub const INDEX_BUFFER: Self = Self(64);
    pub const VERTEX_BUFFER: Self = Self(128);
    pub const INDIRECT_BUFFER: Self = Self(256);
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl BufferUsageFlagBits {
    pub const SHADER_DEVICE_ADDRESS: Self = Self(131072);
}
#[doc = "Provided by [`crate::extensions::ext_transform_feedback`]"]
impl BufferUsageFlagBits {
    pub const TRANSFORM_FEEDBACK_BUFFER_EXT: Self = Self(2048);
    pub const TRANSFORM_FEEDBACK_COUNTER_BUFFER_EXT: Self = Self(4096);
}
#[doc = "Provided by [`crate::extensions::ext_conditional_rendering`]"]
impl BufferUsageFlagBits {
    pub const CONDITIONAL_RENDERING_EXT: Self = Self(512);
}
#[doc = "Provided by [`crate::extensions::khr_acceleration_structure`]"]
impl BufferUsageFlagBits {
    pub const ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_KHR: Self = Self(524288);
    pub const ACCELERATION_STRUCTURE_STORAGE_KHR: Self = Self(1048576);
}
#[doc = "Provided by [`crate::extensions::khr_ray_tracing_pipeline`]"]
impl BufferUsageFlagBits {
    pub const SHADER_BINDING_TABLE_KHR: Self = Self(1024);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl BufferUsageFlagBits {
    pub const RAY_TRACING_NV: Self = Self::SHADER_BINDING_TABLE_KHR;
}
#[doc = "Provided by [`crate::extensions::ext_buffer_device_address`]"]
impl BufferUsageFlagBits {
    pub const SHADER_DEVICE_ADDRESS_EXT: Self = Self::SHADER_DEVICE_ADDRESS;
}
#[doc = "Provided by [`crate::extensions::khr_buffer_device_address`]"]
impl BufferUsageFlagBits {
    pub const SHADER_DEVICE_ADDRESS_KHR: Self = Self::SHADER_DEVICE_ADDRESS;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkColorComponentFlags.html) · Bitmask of [`ColorComponentFlagBits`]"] # [doc (alias = "VkColorComponentFlags")] # [derive (Default)] # [repr (transparent)] pub struct ColorComponentFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const R = ColorComponentFlagBits :: R . 0 ; const G = ColorComponentFlagBits :: G . 0 ; const B = ColorComponentFlagBits :: B . 0 ; const A = ColorComponentFlagBits :: A . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkColorComponentFlagBits.html) · Bits enum of [`ColorComponentFlags`]"]
#[doc(alias = "VkColorComponentFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ColorComponentFlagBits(pub u32);
impl ColorComponentFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> ColorComponentFlags {
        ColorComponentFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for ColorComponentFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::R => "R",
            &Self::G => "G",
            &Self::B => "B",
            &Self::A => "A",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ColorComponentFlagBits {
    pub const R: Self = Self(1);
    pub const G: Self = Self(2);
    pub const B: Self = Self(4);
    pub const A: Self = Self(8);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkComponentSwizzle.html) · Enum"]
#[doc(alias = "VkComponentSwizzle")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ComponentSwizzle(pub i32);
impl std::fmt::Debug for ComponentSwizzle {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::IDENTITY => "IDENTITY",
            &Self::ZERO => "ZERO",
            &Self::ONE => "ONE",
            &Self::R => "R",
            &Self::G => "G",
            &Self::B => "B",
            &Self::A => "A",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ComponentSwizzle {
    pub const IDENTITY: Self = Self(0);
    pub const ZERO: Self = Self(1);
    pub const ONE: Self = Self(2);
    pub const R: Self = Self(3);
    pub const G: Self = Self(4);
    pub const B: Self = Self(5);
    pub const A: Self = Self(6);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandPoolCreateFlags.html) · Bitmask of [`CommandPoolCreateFlagBits`]"] # [doc (alias = "VkCommandPoolCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct CommandPoolCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const TRANSIENT = CommandPoolCreateFlagBits :: TRANSIENT . 0 ; const RESET_COMMAND_BUFFER = CommandPoolCreateFlagBits :: RESET_COMMAND_BUFFER . 0 ; const PROTECTED = CommandPoolCreateFlagBits :: PROTECTED . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandPoolCreateFlagBits.html) · Bits enum of [`CommandPoolCreateFlags`]"]
#[doc(alias = "VkCommandPoolCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct CommandPoolCreateFlagBits(pub u32);
impl CommandPoolCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> CommandPoolCreateFlags {
        CommandPoolCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for CommandPoolCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::TRANSIENT => "TRANSIENT",
            &Self::RESET_COMMAND_BUFFER => "RESET_COMMAND_BUFFER",
            &Self::PROTECTED => "PROTECTED",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl CommandPoolCreateFlagBits {
    pub const TRANSIENT: Self = Self(1);
    pub const RESET_COMMAND_BUFFER: Self = Self(2);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl CommandPoolCreateFlagBits {
    pub const PROTECTED: Self = Self(4);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandPoolResetFlags.html) · Bitmask of [`CommandPoolResetFlagBits`]"] # [doc (alias = "VkCommandPoolResetFlags")] # [derive (Default)] # [repr (transparent)] pub struct CommandPoolResetFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const RELEASE_RESOURCES = CommandPoolResetFlagBits :: RELEASE_RESOURCES . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandPoolResetFlagBits.html) · Bits enum of [`CommandPoolResetFlags`]"]
#[doc(alias = "VkCommandPoolResetFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct CommandPoolResetFlagBits(pub u32);
impl CommandPoolResetFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> CommandPoolResetFlags {
        CommandPoolResetFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for CommandPoolResetFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::RELEASE_RESOURCES => "RELEASE_RESOURCES",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl CommandPoolResetFlagBits {
    pub const RELEASE_RESOURCES: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferResetFlags.html) · Bitmask of [`CommandBufferResetFlagBits`]"] # [doc (alias = "VkCommandBufferResetFlags")] # [derive (Default)] # [repr (transparent)] pub struct CommandBufferResetFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const RELEASE_RESOURCES = CommandBufferResetFlagBits :: RELEASE_RESOURCES . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferResetFlagBits.html) · Bits enum of [`CommandBufferResetFlags`]"]
#[doc(alias = "VkCommandBufferResetFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct CommandBufferResetFlagBits(pub u32);
impl CommandBufferResetFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> CommandBufferResetFlags {
        CommandBufferResetFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for CommandBufferResetFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::RELEASE_RESOURCES => "RELEASE_RESOURCES",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl CommandBufferResetFlagBits {
    pub const RELEASE_RESOURCES: Self = Self(1);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferLevel.html) · Enum"]
#[doc(alias = "VkCommandBufferLevel")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct CommandBufferLevel(pub i32);
impl std::fmt::Debug for CommandBufferLevel {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::PRIMARY => "PRIMARY",
            &Self::SECONDARY => "SECONDARY",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl CommandBufferLevel {
    pub const PRIMARY: Self = Self(0);
    pub const SECONDARY: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferUsageFlags.html) · Bitmask of [`CommandBufferUsageFlagBits`]"] # [doc (alias = "VkCommandBufferUsageFlags")] # [derive (Default)] # [repr (transparent)] pub struct CommandBufferUsageFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const ONE_TIME_SUBMIT = CommandBufferUsageFlagBits :: ONE_TIME_SUBMIT . 0 ; const RENDER_PASS_CONTINUE = CommandBufferUsageFlagBits :: RENDER_PASS_CONTINUE . 0 ; const SIMULTANEOUS_USE = CommandBufferUsageFlagBits :: SIMULTANEOUS_USE . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferUsageFlagBits.html) · Bits enum of [`CommandBufferUsageFlags`]"]
#[doc(alias = "VkCommandBufferUsageFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct CommandBufferUsageFlagBits(pub u32);
impl CommandBufferUsageFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> CommandBufferUsageFlags {
        CommandBufferUsageFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for CommandBufferUsageFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::ONE_TIME_SUBMIT => "ONE_TIME_SUBMIT",
            &Self::RENDER_PASS_CONTINUE => "RENDER_PASS_CONTINUE",
            &Self::SIMULTANEOUS_USE => "SIMULTANEOUS_USE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl CommandBufferUsageFlagBits {
    pub const ONE_TIME_SUBMIT: Self = Self(1);
    pub const RENDER_PASS_CONTINUE: Self = Self(2);
    pub const SIMULTANEOUS_USE: Self = Self(4);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCompareOp.html) · Enum"]
#[doc(alias = "VkCompareOp")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct CompareOp(pub i32);
impl std::fmt::Debug for CompareOp {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::NEVER => "NEVER",
            &Self::LESS => "LESS",
            &Self::EQUAL => "EQUAL",
            &Self::LESS_OR_EQUAL => "LESS_OR_EQUAL",
            &Self::GREATER => "GREATER",
            &Self::NOT_EQUAL => "NOT_EQUAL",
            &Self::GREATER_OR_EQUAL => "GREATER_OR_EQUAL",
            &Self::ALWAYS => "ALWAYS",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl CompareOp {
    pub const NEVER: Self = Self(0);
    pub const LESS: Self = Self(1);
    pub const EQUAL: Self = Self(2);
    pub const LESS_OR_EQUAL: Self = Self(3);
    pub const GREATER: Self = Self(4);
    pub const NOT_EQUAL: Self = Self(5);
    pub const GREATER_OR_EQUAL: Self = Self(6);
    pub const ALWAYS: Self = Self(7);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCullModeFlags.html) · Bitmask of [`CullModeFlagBits`]"] # [doc (alias = "VkCullModeFlags")] # [derive (Default)] # [repr (transparent)] pub struct CullModeFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const NONE = CullModeFlagBits :: NONE . 0 ; const FRONT = CullModeFlagBits :: FRONT . 0 ; const BACK = CullModeFlagBits :: BACK . 0 ; const FRONT_AND_BACK = CullModeFlagBits :: FRONT_AND_BACK . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCullModeFlagBits.html) · Bits enum of [`CullModeFlags`]"]
#[doc(alias = "VkCullModeFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct CullModeFlagBits(pub u32);
impl CullModeFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> CullModeFlags {
        CullModeFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for CullModeFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::NONE => "NONE",
            &Self::FRONT => "FRONT",
            &Self::BACK => "BACK",
            &Self::FRONT_AND_BACK => "FRONT_AND_BACK",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl CullModeFlagBits {
    pub const NONE: Self = Self(0);
    pub const FRONT: Self = Self(1);
    pub const BACK: Self = Self(2);
    pub const FRONT_AND_BACK: Self = Self(3);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorType.html) · Enum"]
#[doc(alias = "VkDescriptorType")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct DescriptorType(pub i32);
impl std::fmt::Debug for DescriptorType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::SAMPLER => "SAMPLER",
            &Self::COMBINED_IMAGE_SAMPLER => "COMBINED_IMAGE_SAMPLER",
            &Self::SAMPLED_IMAGE => "SAMPLED_IMAGE",
            &Self::STORAGE_IMAGE => "STORAGE_IMAGE",
            &Self::UNIFORM_TEXEL_BUFFER => "UNIFORM_TEXEL_BUFFER",
            &Self::STORAGE_TEXEL_BUFFER => "STORAGE_TEXEL_BUFFER",
            &Self::UNIFORM_BUFFER => "UNIFORM_BUFFER",
            &Self::STORAGE_BUFFER => "STORAGE_BUFFER",
            &Self::UNIFORM_BUFFER_DYNAMIC => "UNIFORM_BUFFER_DYNAMIC",
            &Self::STORAGE_BUFFER_DYNAMIC => "STORAGE_BUFFER_DYNAMIC",
            &Self::INPUT_ATTACHMENT => "INPUT_ATTACHMENT",
            &Self::INLINE_UNIFORM_BLOCK_EXT => "INLINE_UNIFORM_BLOCK_EXT",
            &Self::ACCELERATION_STRUCTURE_KHR => "ACCELERATION_STRUCTURE_KHR",
            &Self::ACCELERATION_STRUCTURE_NV => "ACCELERATION_STRUCTURE_NV",
            &Self::MUTABLE_VALVE => "MUTABLE_VALVE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl DescriptorType {
    pub const SAMPLER: Self = Self(0);
    pub const COMBINED_IMAGE_SAMPLER: Self = Self(1);
    pub const SAMPLED_IMAGE: Self = Self(2);
    pub const STORAGE_IMAGE: Self = Self(3);
    pub const UNIFORM_TEXEL_BUFFER: Self = Self(4);
    pub const STORAGE_TEXEL_BUFFER: Self = Self(5);
    pub const UNIFORM_BUFFER: Self = Self(6);
    pub const STORAGE_BUFFER: Self = Self(7);
    pub const UNIFORM_BUFFER_DYNAMIC: Self = Self(8);
    pub const STORAGE_BUFFER_DYNAMIC: Self = Self(9);
    pub const INPUT_ATTACHMENT: Self = Self(10);
}
#[doc = "Provided by [`crate::extensions::ext_inline_uniform_block`]"]
impl DescriptorType {
    pub const INLINE_UNIFORM_BLOCK_EXT: Self = Self(1000138000);
}
#[doc = "Provided by [`crate::extensions::khr_acceleration_structure`]"]
impl DescriptorType {
    pub const ACCELERATION_STRUCTURE_KHR: Self = Self(1000150000);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl DescriptorType {
    pub const ACCELERATION_STRUCTURE_NV: Self = Self(1000165000);
}
#[doc = "Provided by [`crate::extensions::valve_mutable_descriptor_type`]"]
impl DescriptorType {
    pub const MUTABLE_VALVE: Self = Self(1000351000);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDynamicState.html) · Enum"]
#[doc(alias = "VkDynamicState")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct DynamicState(pub i32);
impl std::fmt::Debug for DynamicState {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::VIEWPORT => "VIEWPORT",
            &Self::SCISSOR => "SCISSOR",
            &Self::LINE_WIDTH => "LINE_WIDTH",
            &Self::DEPTH_BIAS => "DEPTH_BIAS",
            &Self::BLEND_CONSTANTS => "BLEND_CONSTANTS",
            &Self::DEPTH_BOUNDS => "DEPTH_BOUNDS",
            &Self::STENCIL_COMPARE_MASK => "STENCIL_COMPARE_MASK",
            &Self::STENCIL_WRITE_MASK => "STENCIL_WRITE_MASK",
            &Self::STENCIL_REFERENCE => "STENCIL_REFERENCE",
            &Self::VIEWPORT_W_SCALING_NV => "VIEWPORT_W_SCALING_NV",
            &Self::DISCARD_RECTANGLE_EXT => "DISCARD_RECTANGLE_EXT",
            &Self::SAMPLE_LOCATIONS_EXT => "SAMPLE_LOCATIONS_EXT",
            &Self::RAY_TRACING_PIPELINE_STACK_SIZE_KHR => "RAY_TRACING_PIPELINE_STACK_SIZE_KHR",
            &Self::VIEWPORT_SHADING_RATE_PALETTE_NV => "VIEWPORT_SHADING_RATE_PALETTE_NV",
            &Self::VIEWPORT_COARSE_SAMPLE_ORDER_NV => "VIEWPORT_COARSE_SAMPLE_ORDER_NV",
            &Self::EXCLUSIVE_SCISSOR_NV => "EXCLUSIVE_SCISSOR_NV",
            &Self::FRAGMENT_SHADING_RATE_KHR => "FRAGMENT_SHADING_RATE_KHR",
            &Self::LINE_STIPPLE_EXT => "LINE_STIPPLE_EXT",
            &Self::CULL_MODE_EXT => "CULL_MODE_EXT",
            &Self::FRONT_FACE_EXT => "FRONT_FACE_EXT",
            &Self::PRIMITIVE_TOPOLOGY_EXT => "PRIMITIVE_TOPOLOGY_EXT",
            &Self::VIEWPORT_WITH_COUNT_EXT => "VIEWPORT_WITH_COUNT_EXT",
            &Self::SCISSOR_WITH_COUNT_EXT => "SCISSOR_WITH_COUNT_EXT",
            &Self::VERTEX_INPUT_BINDING_STRIDE_EXT => "VERTEX_INPUT_BINDING_STRIDE_EXT",
            &Self::DEPTH_TEST_ENABLE_EXT => "DEPTH_TEST_ENABLE_EXT",
            &Self::DEPTH_WRITE_ENABLE_EXT => "DEPTH_WRITE_ENABLE_EXT",
            &Self::DEPTH_COMPARE_OP_EXT => "DEPTH_COMPARE_OP_EXT",
            &Self::DEPTH_BOUNDS_TEST_ENABLE_EXT => "DEPTH_BOUNDS_TEST_ENABLE_EXT",
            &Self::STENCIL_TEST_ENABLE_EXT => "STENCIL_TEST_ENABLE_EXT",
            &Self::STENCIL_OP_EXT => "STENCIL_OP_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl DynamicState {
    pub const VIEWPORT: Self = Self(0);
    pub const SCISSOR: Self = Self(1);
    pub const LINE_WIDTH: Self = Self(2);
    pub const DEPTH_BIAS: Self = Self(3);
    pub const BLEND_CONSTANTS: Self = Self(4);
    pub const DEPTH_BOUNDS: Self = Self(5);
    pub const STENCIL_COMPARE_MASK: Self = Self(6);
    pub const STENCIL_WRITE_MASK: Self = Self(7);
    pub const STENCIL_REFERENCE: Self = Self(8);
}
#[doc = "Provided by [`crate::extensions::nv_clip_space_w_scaling`]"]
impl DynamicState {
    pub const VIEWPORT_W_SCALING_NV: Self = Self(1000087000);
}
#[doc = "Provided by [`crate::extensions::ext_discard_rectangles`]"]
impl DynamicState {
    pub const DISCARD_RECTANGLE_EXT: Self = Self(1000099000);
}
#[doc = "Provided by [`crate::extensions::ext_sample_locations`]"]
impl DynamicState {
    pub const SAMPLE_LOCATIONS_EXT: Self = Self(1000143000);
}
#[doc = "Provided by [`crate::extensions::khr_ray_tracing_pipeline`]"]
impl DynamicState {
    pub const RAY_TRACING_PIPELINE_STACK_SIZE_KHR: Self = Self(1000347000);
}
#[doc = "Provided by [`crate::extensions::nv_shading_rate_image`]"]
impl DynamicState {
    pub const VIEWPORT_SHADING_RATE_PALETTE_NV: Self = Self(1000164004);
    pub const VIEWPORT_COARSE_SAMPLE_ORDER_NV: Self = Self(1000164006);
}
#[doc = "Provided by [`crate::extensions::nv_scissor_exclusive`]"]
impl DynamicState {
    pub const EXCLUSIVE_SCISSOR_NV: Self = Self(1000205001);
}
#[doc = "Provided by [`crate::extensions::khr_fragment_shading_rate`]"]
impl DynamicState {
    pub const FRAGMENT_SHADING_RATE_KHR: Self = Self(1000226000);
}
#[doc = "Provided by [`crate::extensions::ext_line_rasterization`]"]
impl DynamicState {
    pub const LINE_STIPPLE_EXT: Self = Self(1000259000);
}
#[doc = "Provided by [`crate::extensions::ext_extended_dynamic_state`]"]
impl DynamicState {
    pub const CULL_MODE_EXT: Self = Self(1000267000);
    pub const FRONT_FACE_EXT: Self = Self(1000267001);
    pub const PRIMITIVE_TOPOLOGY_EXT: Self = Self(1000267002);
    pub const VIEWPORT_WITH_COUNT_EXT: Self = Self(1000267003);
    pub const SCISSOR_WITH_COUNT_EXT: Self = Self(1000267004);
    pub const VERTEX_INPUT_BINDING_STRIDE_EXT: Self = Self(1000267005);
    pub const DEPTH_TEST_ENABLE_EXT: Self = Self(1000267006);
    pub const DEPTH_WRITE_ENABLE_EXT: Self = Self(1000267007);
    pub const DEPTH_COMPARE_OP_EXT: Self = Self(1000267008);
    pub const DEPTH_BOUNDS_TEST_ENABLE_EXT: Self = Self(1000267009);
    pub const STENCIL_TEST_ENABLE_EXT: Self = Self(1000267010);
    pub const STENCIL_OP_EXT: Self = Self(1000267011);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFenceCreateFlags.html) · Bitmask of [`FenceCreateFlagBits`]"] # [doc (alias = "VkFenceCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct FenceCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const SIGNALED = FenceCreateFlagBits :: SIGNALED . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFenceCreateFlagBits.html) · Bits enum of [`FenceCreateFlags`]"]
#[doc(alias = "VkFenceCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct FenceCreateFlagBits(pub u32);
impl FenceCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> FenceCreateFlags {
        FenceCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for FenceCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::SIGNALED => "SIGNALED",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl FenceCreateFlagBits {
    pub const SIGNALED: Self = Self(1);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPolygonMode.html) · Enum"]
#[doc(alias = "VkPolygonMode")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PolygonMode(pub i32);
impl std::fmt::Debug for PolygonMode {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::FILL => "FILL",
            &Self::LINE => "LINE",
            &Self::POINT => "POINT",
            &Self::FILL_RECTANGLE_NV => "FILL_RECTANGLE_NV",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl PolygonMode {
    pub const FILL: Self = Self(0);
    pub const LINE: Self = Self(1);
    pub const POINT: Self = Self(2);
}
#[doc = "Provided by [`crate::extensions::nv_fill_rectangle`]"]
impl PolygonMode {
    pub const FILL_RECTANGLE_NV: Self = Self(1000153000);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormat.html) · Enum"]
#[doc(alias = "VkFormat")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct Format(pub i32);
impl std::fmt::Debug for Format {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::UNDEFINED => "UNDEFINED",
            &Self::R4G4_UNORM_PACK8 => "R4G4_UNORM_PACK8",
            &Self::R4G4B4A4_UNORM_PACK16 => "R4G4B4A4_UNORM_PACK16",
            &Self::B4G4R4A4_UNORM_PACK16 => "B4G4R4A4_UNORM_PACK16",
            &Self::R5G6B5_UNORM_PACK16 => "R5G6B5_UNORM_PACK16",
            &Self::B5G6R5_UNORM_PACK16 => "B5G6R5_UNORM_PACK16",
            &Self::R5G5B5A1_UNORM_PACK16 => "R5G5B5A1_UNORM_PACK16",
            &Self::B5G5R5A1_UNORM_PACK16 => "B5G5R5A1_UNORM_PACK16",
            &Self::A1R5G5B5_UNORM_PACK16 => "A1R5G5B5_UNORM_PACK16",
            &Self::R8_UNORM => "R8_UNORM",
            &Self::R8_SNORM => "R8_SNORM",
            &Self::R8_USCALED => "R8_USCALED",
            &Self::R8_SSCALED => "R8_SSCALED",
            &Self::R8_UINT => "R8_UINT",
            &Self::R8_SINT => "R8_SINT",
            &Self::R8_SRGB => "R8_SRGB",
            &Self::R8G8_UNORM => "R8G8_UNORM",
            &Self::R8G8_SNORM => "R8G8_SNORM",
            &Self::R8G8_USCALED => "R8G8_USCALED",
            &Self::R8G8_SSCALED => "R8G8_SSCALED",
            &Self::R8G8_UINT => "R8G8_UINT",
            &Self::R8G8_SINT => "R8G8_SINT",
            &Self::R8G8_SRGB => "R8G8_SRGB",
            &Self::R8G8B8_UNORM => "R8G8B8_UNORM",
            &Self::R8G8B8_SNORM => "R8G8B8_SNORM",
            &Self::R8G8B8_USCALED => "R8G8B8_USCALED",
            &Self::R8G8B8_SSCALED => "R8G8B8_SSCALED",
            &Self::R8G8B8_UINT => "R8G8B8_UINT",
            &Self::R8G8B8_SINT => "R8G8B8_SINT",
            &Self::R8G8B8_SRGB => "R8G8B8_SRGB",
            &Self::B8G8R8_UNORM => "B8G8R8_UNORM",
            &Self::B8G8R8_SNORM => "B8G8R8_SNORM",
            &Self::B8G8R8_USCALED => "B8G8R8_USCALED",
            &Self::B8G8R8_SSCALED => "B8G8R8_SSCALED",
            &Self::B8G8R8_UINT => "B8G8R8_UINT",
            &Self::B8G8R8_SINT => "B8G8R8_SINT",
            &Self::B8G8R8_SRGB => "B8G8R8_SRGB",
            &Self::R8G8B8A8_UNORM => "R8G8B8A8_UNORM",
            &Self::R8G8B8A8_SNORM => "R8G8B8A8_SNORM",
            &Self::R8G8B8A8_USCALED => "R8G8B8A8_USCALED",
            &Self::R8G8B8A8_SSCALED => "R8G8B8A8_SSCALED",
            &Self::R8G8B8A8_UINT => "R8G8B8A8_UINT",
            &Self::R8G8B8A8_SINT => "R8G8B8A8_SINT",
            &Self::R8G8B8A8_SRGB => "R8G8B8A8_SRGB",
            &Self::B8G8R8A8_UNORM => "B8G8R8A8_UNORM",
            &Self::B8G8R8A8_SNORM => "B8G8R8A8_SNORM",
            &Self::B8G8R8A8_USCALED => "B8G8R8A8_USCALED",
            &Self::B8G8R8A8_SSCALED => "B8G8R8A8_SSCALED",
            &Self::B8G8R8A8_UINT => "B8G8R8A8_UINT",
            &Self::B8G8R8A8_SINT => "B8G8R8A8_SINT",
            &Self::B8G8R8A8_SRGB => "B8G8R8A8_SRGB",
            &Self::A8B8G8R8_UNORM_PACK32 => "A8B8G8R8_UNORM_PACK32",
            &Self::A8B8G8R8_SNORM_PACK32 => "A8B8G8R8_SNORM_PACK32",
            &Self::A8B8G8R8_USCALED_PACK32 => "A8B8G8R8_USCALED_PACK32",
            &Self::A8B8G8R8_SSCALED_PACK32 => "A8B8G8R8_SSCALED_PACK32",
            &Self::A8B8G8R8_UINT_PACK32 => "A8B8G8R8_UINT_PACK32",
            &Self::A8B8G8R8_SINT_PACK32 => "A8B8G8R8_SINT_PACK32",
            &Self::A8B8G8R8_SRGB_PACK32 => "A8B8G8R8_SRGB_PACK32",
            &Self::A2R10G10B10_UNORM_PACK32 => "A2R10G10B10_UNORM_PACK32",
            &Self::A2R10G10B10_SNORM_PACK32 => "A2R10G10B10_SNORM_PACK32",
            &Self::A2R10G10B10_USCALED_PACK32 => "A2R10G10B10_USCALED_PACK32",
            &Self::A2R10G10B10_SSCALED_PACK32 => "A2R10G10B10_SSCALED_PACK32",
            &Self::A2R10G10B10_UINT_PACK32 => "A2R10G10B10_UINT_PACK32",
            &Self::A2R10G10B10_SINT_PACK32 => "A2R10G10B10_SINT_PACK32",
            &Self::A2B10G10R10_UNORM_PACK32 => "A2B10G10R10_UNORM_PACK32",
            &Self::A2B10G10R10_SNORM_PACK32 => "A2B10G10R10_SNORM_PACK32",
            &Self::A2B10G10R10_USCALED_PACK32 => "A2B10G10R10_USCALED_PACK32",
            &Self::A2B10G10R10_SSCALED_PACK32 => "A2B10G10R10_SSCALED_PACK32",
            &Self::A2B10G10R10_UINT_PACK32 => "A2B10G10R10_UINT_PACK32",
            &Self::A2B10G10R10_SINT_PACK32 => "A2B10G10R10_SINT_PACK32",
            &Self::R16_UNORM => "R16_UNORM",
            &Self::R16_SNORM => "R16_SNORM",
            &Self::R16_USCALED => "R16_USCALED",
            &Self::R16_SSCALED => "R16_SSCALED",
            &Self::R16_UINT => "R16_UINT",
            &Self::R16_SINT => "R16_SINT",
            &Self::R16_SFLOAT => "R16_SFLOAT",
            &Self::R16G16_UNORM => "R16G16_UNORM",
            &Self::R16G16_SNORM => "R16G16_SNORM",
            &Self::R16G16_USCALED => "R16G16_USCALED",
            &Self::R16G16_SSCALED => "R16G16_SSCALED",
            &Self::R16G16_UINT => "R16G16_UINT",
            &Self::R16G16_SINT => "R16G16_SINT",
            &Self::R16G16_SFLOAT => "R16G16_SFLOAT",
            &Self::R16G16B16_UNORM => "R16G16B16_UNORM",
            &Self::R16G16B16_SNORM => "R16G16B16_SNORM",
            &Self::R16G16B16_USCALED => "R16G16B16_USCALED",
            &Self::R16G16B16_SSCALED => "R16G16B16_SSCALED",
            &Self::R16G16B16_UINT => "R16G16B16_UINT",
            &Self::R16G16B16_SINT => "R16G16B16_SINT",
            &Self::R16G16B16_SFLOAT => "R16G16B16_SFLOAT",
            &Self::R16G16B16A16_UNORM => "R16G16B16A16_UNORM",
            &Self::R16G16B16A16_SNORM => "R16G16B16A16_SNORM",
            &Self::R16G16B16A16_USCALED => "R16G16B16A16_USCALED",
            &Self::R16G16B16A16_SSCALED => "R16G16B16A16_SSCALED",
            &Self::R16G16B16A16_UINT => "R16G16B16A16_UINT",
            &Self::R16G16B16A16_SINT => "R16G16B16A16_SINT",
            &Self::R16G16B16A16_SFLOAT => "R16G16B16A16_SFLOAT",
            &Self::R32_UINT => "R32_UINT",
            &Self::R32_SINT => "R32_SINT",
            &Self::R32_SFLOAT => "R32_SFLOAT",
            &Self::R32G32_UINT => "R32G32_UINT",
            &Self::R32G32_SINT => "R32G32_SINT",
            &Self::R32G32_SFLOAT => "R32G32_SFLOAT",
            &Self::R32G32B32_UINT => "R32G32B32_UINT",
            &Self::R32G32B32_SINT => "R32G32B32_SINT",
            &Self::R32G32B32_SFLOAT => "R32G32B32_SFLOAT",
            &Self::R32G32B32A32_UINT => "R32G32B32A32_UINT",
            &Self::R32G32B32A32_SINT => "R32G32B32A32_SINT",
            &Self::R32G32B32A32_SFLOAT => "R32G32B32A32_SFLOAT",
            &Self::R64_UINT => "R64_UINT",
            &Self::R64_SINT => "R64_SINT",
            &Self::R64_SFLOAT => "R64_SFLOAT",
            &Self::R64G64_UINT => "R64G64_UINT",
            &Self::R64G64_SINT => "R64G64_SINT",
            &Self::R64G64_SFLOAT => "R64G64_SFLOAT",
            &Self::R64G64B64_UINT => "R64G64B64_UINT",
            &Self::R64G64B64_SINT => "R64G64B64_SINT",
            &Self::R64G64B64_SFLOAT => "R64G64B64_SFLOAT",
            &Self::R64G64B64A64_UINT => "R64G64B64A64_UINT",
            &Self::R64G64B64A64_SINT => "R64G64B64A64_SINT",
            &Self::R64G64B64A64_SFLOAT => "R64G64B64A64_SFLOAT",
            &Self::B10G11R11_UFLOAT_PACK32 => "B10G11R11_UFLOAT_PACK32",
            &Self::E5B9G9R9_UFLOAT_PACK32 => "E5B9G9R9_UFLOAT_PACK32",
            &Self::D16_UNORM => "D16_UNORM",
            &Self::X8_D24_UNORM_PACK32 => "X8_D24_UNORM_PACK32",
            &Self::D32_SFLOAT => "D32_SFLOAT",
            &Self::S8_UINT => "S8_UINT",
            &Self::D16_UNORM_S8_UINT => "D16_UNORM_S8_UINT",
            &Self::D24_UNORM_S8_UINT => "D24_UNORM_S8_UINT",
            &Self::D32_SFLOAT_S8_UINT => "D32_SFLOAT_S8_UINT",
            &Self::BC1_RGB_UNORM_BLOCK => "BC1_RGB_UNORM_BLOCK",
            &Self::BC1_RGB_SRGB_BLOCK => "BC1_RGB_SRGB_BLOCK",
            &Self::BC1_RGBA_UNORM_BLOCK => "BC1_RGBA_UNORM_BLOCK",
            &Self::BC1_RGBA_SRGB_BLOCK => "BC1_RGBA_SRGB_BLOCK",
            &Self::BC2_UNORM_BLOCK => "BC2_UNORM_BLOCK",
            &Self::BC2_SRGB_BLOCK => "BC2_SRGB_BLOCK",
            &Self::BC3_UNORM_BLOCK => "BC3_UNORM_BLOCK",
            &Self::BC3_SRGB_BLOCK => "BC3_SRGB_BLOCK",
            &Self::BC4_UNORM_BLOCK => "BC4_UNORM_BLOCK",
            &Self::BC4_SNORM_BLOCK => "BC4_SNORM_BLOCK",
            &Self::BC5_UNORM_BLOCK => "BC5_UNORM_BLOCK",
            &Self::BC5_SNORM_BLOCK => "BC5_SNORM_BLOCK",
            &Self::BC6H_UFLOAT_BLOCK => "BC6H_UFLOAT_BLOCK",
            &Self::BC6H_SFLOAT_BLOCK => "BC6H_SFLOAT_BLOCK",
            &Self::BC7_UNORM_BLOCK => "BC7_UNORM_BLOCK",
            &Self::BC7_SRGB_BLOCK => "BC7_SRGB_BLOCK",
            &Self::ETC2_R8G8B8_UNORM_BLOCK => "ETC2_R8G8B8_UNORM_BLOCK",
            &Self::ETC2_R8G8B8_SRGB_BLOCK => "ETC2_R8G8B8_SRGB_BLOCK",
            &Self::ETC2_R8G8B8A1_UNORM_BLOCK => "ETC2_R8G8B8A1_UNORM_BLOCK",
            &Self::ETC2_R8G8B8A1_SRGB_BLOCK => "ETC2_R8G8B8A1_SRGB_BLOCK",
            &Self::ETC2_R8G8B8A8_UNORM_BLOCK => "ETC2_R8G8B8A8_UNORM_BLOCK",
            &Self::ETC2_R8G8B8A8_SRGB_BLOCK => "ETC2_R8G8B8A8_SRGB_BLOCK",
            &Self::EAC_R11_UNORM_BLOCK => "EAC_R11_UNORM_BLOCK",
            &Self::EAC_R11_SNORM_BLOCK => "EAC_R11_SNORM_BLOCK",
            &Self::EAC_R11G11_UNORM_BLOCK => "EAC_R11G11_UNORM_BLOCK",
            &Self::EAC_R11G11_SNORM_BLOCK => "EAC_R11G11_SNORM_BLOCK",
            &Self::ASTC_4X4_UNORM_BLOCK => "ASTC_4X4_UNORM_BLOCK",
            &Self::ASTC_4X4_SRGB_BLOCK => "ASTC_4X4_SRGB_BLOCK",
            &Self::ASTC_5X4_UNORM_BLOCK => "ASTC_5X4_UNORM_BLOCK",
            &Self::ASTC_5X4_SRGB_BLOCK => "ASTC_5X4_SRGB_BLOCK",
            &Self::ASTC_5X5_UNORM_BLOCK => "ASTC_5X5_UNORM_BLOCK",
            &Self::ASTC_5X5_SRGB_BLOCK => "ASTC_5X5_SRGB_BLOCK",
            &Self::ASTC_6X5_UNORM_BLOCK => "ASTC_6X5_UNORM_BLOCK",
            &Self::ASTC_6X5_SRGB_BLOCK => "ASTC_6X5_SRGB_BLOCK",
            &Self::ASTC_6X6_UNORM_BLOCK => "ASTC_6X6_UNORM_BLOCK",
            &Self::ASTC_6X6_SRGB_BLOCK => "ASTC_6X6_SRGB_BLOCK",
            &Self::ASTC_8X5_UNORM_BLOCK => "ASTC_8X5_UNORM_BLOCK",
            &Self::ASTC_8X5_SRGB_BLOCK => "ASTC_8X5_SRGB_BLOCK",
            &Self::ASTC_8X6_UNORM_BLOCK => "ASTC_8X6_UNORM_BLOCK",
            &Self::ASTC_8X6_SRGB_BLOCK => "ASTC_8X6_SRGB_BLOCK",
            &Self::ASTC_8X8_UNORM_BLOCK => "ASTC_8X8_UNORM_BLOCK",
            &Self::ASTC_8X8_SRGB_BLOCK => "ASTC_8X8_SRGB_BLOCK",
            &Self::ASTC_10X5_UNORM_BLOCK => "ASTC_10X5_UNORM_BLOCK",
            &Self::ASTC_10X5_SRGB_BLOCK => "ASTC_10X5_SRGB_BLOCK",
            &Self::ASTC_10X6_UNORM_BLOCK => "ASTC_10X6_UNORM_BLOCK",
            &Self::ASTC_10X6_SRGB_BLOCK => "ASTC_10X6_SRGB_BLOCK",
            &Self::ASTC_10X8_UNORM_BLOCK => "ASTC_10X8_UNORM_BLOCK",
            &Self::ASTC_10X8_SRGB_BLOCK => "ASTC_10X8_SRGB_BLOCK",
            &Self::ASTC_10X10_UNORM_BLOCK => "ASTC_10X10_UNORM_BLOCK",
            &Self::ASTC_10X10_SRGB_BLOCK => "ASTC_10X10_SRGB_BLOCK",
            &Self::ASTC_12X10_UNORM_BLOCK => "ASTC_12X10_UNORM_BLOCK",
            &Self::ASTC_12X10_SRGB_BLOCK => "ASTC_12X10_SRGB_BLOCK",
            &Self::ASTC_12X12_UNORM_BLOCK => "ASTC_12X12_UNORM_BLOCK",
            &Self::ASTC_12X12_SRGB_BLOCK => "ASTC_12X12_SRGB_BLOCK",
            &Self::G8B8G8R8_422_UNORM => "G8B8G8R8_422_UNORM",
            &Self::B8G8R8G8_422_UNORM => "B8G8R8G8_422_UNORM",
            &Self::G8_B8_R8_3PLANE_420_UNORM => "G8_B8_R8_3PLANE_420_UNORM",
            &Self::G8_B8R8_2PLANE_420_UNORM => "G8_B8R8_2PLANE_420_UNORM",
            &Self::G8_B8_R8_3PLANE_422_UNORM => "G8_B8_R8_3PLANE_422_UNORM",
            &Self::G8_B8R8_2PLANE_422_UNORM => "G8_B8R8_2PLANE_422_UNORM",
            &Self::G8_B8_R8_3PLANE_444_UNORM => "G8_B8_R8_3PLANE_444_UNORM",
            &Self::R10X6_UNORM_PACK16 => "R10X6_UNORM_PACK16",
            &Self::R10X6G10X6_UNORM_2PACK16 => "R10X6G10X6_UNORM_2PACK16",
            &Self::R10X6G10X6B10X6A10X6_UNORM_4PACK16 => "R10X6G10X6B10X6A10X6_UNORM_4PACK16",
            &Self::G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 => {
                "G10X6B10X6G10X6R10X6_422_UNORM_4PACK16"
            }
            &Self::B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 => {
                "B10X6G10X6R10X6G10X6_422_UNORM_4PACK16"
            }
            &Self::G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 => {
                "G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16"
            }
            &Self::G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 => {
                "G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16"
            }
            &Self::G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 => {
                "G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16"
            }
            &Self::G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 => {
                "G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16"
            }
            &Self::G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 => {
                "G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16"
            }
            &Self::R12X4_UNORM_PACK16 => "R12X4_UNORM_PACK16",
            &Self::R12X4G12X4_UNORM_2PACK16 => "R12X4G12X4_UNORM_2PACK16",
            &Self::R12X4G12X4B12X4A12X4_UNORM_4PACK16 => "R12X4G12X4B12X4A12X4_UNORM_4PACK16",
            &Self::G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 => {
                "G12X4B12X4G12X4R12X4_422_UNORM_4PACK16"
            }
            &Self::B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 => {
                "B12X4G12X4R12X4G12X4_422_UNORM_4PACK16"
            }
            &Self::G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 => {
                "G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16"
            }
            &Self::G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 => {
                "G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16"
            }
            &Self::G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 => {
                "G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16"
            }
            &Self::G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 => {
                "G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16"
            }
            &Self::G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 => {
                "G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16"
            }
            &Self::G16B16G16R16_422_UNORM => "G16B16G16R16_422_UNORM",
            &Self::B16G16R16G16_422_UNORM => "B16G16R16G16_422_UNORM",
            &Self::G16_B16_R16_3PLANE_420_UNORM => "G16_B16_R16_3PLANE_420_UNORM",
            &Self::G16_B16R16_2PLANE_420_UNORM => "G16_B16R16_2PLANE_420_UNORM",
            &Self::G16_B16_R16_3PLANE_422_UNORM => "G16_B16_R16_3PLANE_422_UNORM",
            &Self::G16_B16R16_2PLANE_422_UNORM => "G16_B16R16_2PLANE_422_UNORM",
            &Self::G16_B16_R16_3PLANE_444_UNORM => "G16_B16_R16_3PLANE_444_UNORM",
            &Self::PVRTC1_2BPP_UNORM_BLOCK_IMG => "PVRTC1_2BPP_UNORM_BLOCK_IMG",
            &Self::PVRTC1_4BPP_UNORM_BLOCK_IMG => "PVRTC1_4BPP_UNORM_BLOCK_IMG",
            &Self::PVRTC2_2BPP_UNORM_BLOCK_IMG => "PVRTC2_2BPP_UNORM_BLOCK_IMG",
            &Self::PVRTC2_4BPP_UNORM_BLOCK_IMG => "PVRTC2_4BPP_UNORM_BLOCK_IMG",
            &Self::PVRTC1_2BPP_SRGB_BLOCK_IMG => "PVRTC1_2BPP_SRGB_BLOCK_IMG",
            &Self::PVRTC1_4BPP_SRGB_BLOCK_IMG => "PVRTC1_4BPP_SRGB_BLOCK_IMG",
            &Self::PVRTC2_2BPP_SRGB_BLOCK_IMG => "PVRTC2_2BPP_SRGB_BLOCK_IMG",
            &Self::PVRTC2_4BPP_SRGB_BLOCK_IMG => "PVRTC2_4BPP_SRGB_BLOCK_IMG",
            &Self::ASTC_4X4_SFLOAT_BLOCK_EXT => "ASTC_4X4_SFLOAT_BLOCK_EXT",
            &Self::ASTC_5X4_SFLOAT_BLOCK_EXT => "ASTC_5X4_SFLOAT_BLOCK_EXT",
            &Self::ASTC_5X5_SFLOAT_BLOCK_EXT => "ASTC_5X5_SFLOAT_BLOCK_EXT",
            &Self::ASTC_6X5_SFLOAT_BLOCK_EXT => "ASTC_6X5_SFLOAT_BLOCK_EXT",
            &Self::ASTC_6X6_SFLOAT_BLOCK_EXT => "ASTC_6X6_SFLOAT_BLOCK_EXT",
            &Self::ASTC_8X5_SFLOAT_BLOCK_EXT => "ASTC_8X5_SFLOAT_BLOCK_EXT",
            &Self::ASTC_8X6_SFLOAT_BLOCK_EXT => "ASTC_8X6_SFLOAT_BLOCK_EXT",
            &Self::ASTC_8X8_SFLOAT_BLOCK_EXT => "ASTC_8X8_SFLOAT_BLOCK_EXT",
            &Self::ASTC_10X5_SFLOAT_BLOCK_EXT => "ASTC_10X5_SFLOAT_BLOCK_EXT",
            &Self::ASTC_10X6_SFLOAT_BLOCK_EXT => "ASTC_10X6_SFLOAT_BLOCK_EXT",
            &Self::ASTC_10X8_SFLOAT_BLOCK_EXT => "ASTC_10X8_SFLOAT_BLOCK_EXT",
            &Self::ASTC_10X10_SFLOAT_BLOCK_EXT => "ASTC_10X10_SFLOAT_BLOCK_EXT",
            &Self::ASTC_12X10_SFLOAT_BLOCK_EXT => "ASTC_12X10_SFLOAT_BLOCK_EXT",
            &Self::ASTC_12X12_SFLOAT_BLOCK_EXT => "ASTC_12X12_SFLOAT_BLOCK_EXT",
            &Self::A4R4G4B4_UNORM_PACK16_EXT => "A4R4G4B4_UNORM_PACK16_EXT",
            &Self::A4B4G4R4_UNORM_PACK16_EXT => "A4B4G4R4_UNORM_PACK16_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl Format {
    pub const UNDEFINED: Self = Self(0);
    pub const R4G4_UNORM_PACK8: Self = Self(1);
    pub const R4G4B4A4_UNORM_PACK16: Self = Self(2);
    pub const B4G4R4A4_UNORM_PACK16: Self = Self(3);
    pub const R5G6B5_UNORM_PACK16: Self = Self(4);
    pub const B5G6R5_UNORM_PACK16: Self = Self(5);
    pub const R5G5B5A1_UNORM_PACK16: Self = Self(6);
    pub const B5G5R5A1_UNORM_PACK16: Self = Self(7);
    pub const A1R5G5B5_UNORM_PACK16: Self = Self(8);
    pub const R8_UNORM: Self = Self(9);
    pub const R8_SNORM: Self = Self(10);
    pub const R8_USCALED: Self = Self(11);
    pub const R8_SSCALED: Self = Self(12);
    pub const R8_UINT: Self = Self(13);
    pub const R8_SINT: Self = Self(14);
    pub const R8_SRGB: Self = Self(15);
    pub const R8G8_UNORM: Self = Self(16);
    pub const R8G8_SNORM: Self = Self(17);
    pub const R8G8_USCALED: Self = Self(18);
    pub const R8G8_SSCALED: Self = Self(19);
    pub const R8G8_UINT: Self = Self(20);
    pub const R8G8_SINT: Self = Self(21);
    pub const R8G8_SRGB: Self = Self(22);
    pub const R8G8B8_UNORM: Self = Self(23);
    pub const R8G8B8_SNORM: Self = Self(24);
    pub const R8G8B8_USCALED: Self = Self(25);
    pub const R8G8B8_SSCALED: Self = Self(26);
    pub const R8G8B8_UINT: Self = Self(27);
    pub const R8G8B8_SINT: Self = Self(28);
    pub const R8G8B8_SRGB: Self = Self(29);
    pub const B8G8R8_UNORM: Self = Self(30);
    pub const B8G8R8_SNORM: Self = Self(31);
    pub const B8G8R8_USCALED: Self = Self(32);
    pub const B8G8R8_SSCALED: Self = Self(33);
    pub const B8G8R8_UINT: Self = Self(34);
    pub const B8G8R8_SINT: Self = Self(35);
    pub const B8G8R8_SRGB: Self = Self(36);
    pub const R8G8B8A8_UNORM: Self = Self(37);
    pub const R8G8B8A8_SNORM: Self = Self(38);
    pub const R8G8B8A8_USCALED: Self = Self(39);
    pub const R8G8B8A8_SSCALED: Self = Self(40);
    pub const R8G8B8A8_UINT: Self = Self(41);
    pub const R8G8B8A8_SINT: Self = Self(42);
    pub const R8G8B8A8_SRGB: Self = Self(43);
    pub const B8G8R8A8_UNORM: Self = Self(44);
    pub const B8G8R8A8_SNORM: Self = Self(45);
    pub const B8G8R8A8_USCALED: Self = Self(46);
    pub const B8G8R8A8_SSCALED: Self = Self(47);
    pub const B8G8R8A8_UINT: Self = Self(48);
    pub const B8G8R8A8_SINT: Self = Self(49);
    pub const B8G8R8A8_SRGB: Self = Self(50);
    pub const A8B8G8R8_UNORM_PACK32: Self = Self(51);
    pub const A8B8G8R8_SNORM_PACK32: Self = Self(52);
    pub const A8B8G8R8_USCALED_PACK32: Self = Self(53);
    pub const A8B8G8R8_SSCALED_PACK32: Self = Self(54);
    pub const A8B8G8R8_UINT_PACK32: Self = Self(55);
    pub const A8B8G8R8_SINT_PACK32: Self = Self(56);
    pub const A8B8G8R8_SRGB_PACK32: Self = Self(57);
    pub const A2R10G10B10_UNORM_PACK32: Self = Self(58);
    pub const A2R10G10B10_SNORM_PACK32: Self = Self(59);
    pub const A2R10G10B10_USCALED_PACK32: Self = Self(60);
    pub const A2R10G10B10_SSCALED_PACK32: Self = Self(61);
    pub const A2R10G10B10_UINT_PACK32: Self = Self(62);
    pub const A2R10G10B10_SINT_PACK32: Self = Self(63);
    pub const A2B10G10R10_UNORM_PACK32: Self = Self(64);
    pub const A2B10G10R10_SNORM_PACK32: Self = Self(65);
    pub const A2B10G10R10_USCALED_PACK32: Self = Self(66);
    pub const A2B10G10R10_SSCALED_PACK32: Self = Self(67);
    pub const A2B10G10R10_UINT_PACK32: Self = Self(68);
    pub const A2B10G10R10_SINT_PACK32: Self = Self(69);
    pub const R16_UNORM: Self = Self(70);
    pub const R16_SNORM: Self = Self(71);
    pub const R16_USCALED: Self = Self(72);
    pub const R16_SSCALED: Self = Self(73);
    pub const R16_UINT: Self = Self(74);
    pub const R16_SINT: Self = Self(75);
    pub const R16_SFLOAT: Self = Self(76);
    pub const R16G16_UNORM: Self = Self(77);
    pub const R16G16_SNORM: Self = Self(78);
    pub const R16G16_USCALED: Self = Self(79);
    pub const R16G16_SSCALED: Self = Self(80);
    pub const R16G16_UINT: Self = Self(81);
    pub const R16G16_SINT: Self = Self(82);
    pub const R16G16_SFLOAT: Self = Self(83);
    pub const R16G16B16_UNORM: Self = Self(84);
    pub const R16G16B16_SNORM: Self = Self(85);
    pub const R16G16B16_USCALED: Self = Self(86);
    pub const R16G16B16_SSCALED: Self = Self(87);
    pub const R16G16B16_UINT: Self = Self(88);
    pub const R16G16B16_SINT: Self = Self(89);
    pub const R16G16B16_SFLOAT: Self = Self(90);
    pub const R16G16B16A16_UNORM: Self = Self(91);
    pub const R16G16B16A16_SNORM: Self = Self(92);
    pub const R16G16B16A16_USCALED: Self = Self(93);
    pub const R16G16B16A16_SSCALED: Self = Self(94);
    pub const R16G16B16A16_UINT: Self = Self(95);
    pub const R16G16B16A16_SINT: Self = Self(96);
    pub const R16G16B16A16_SFLOAT: Self = Self(97);
    pub const R32_UINT: Self = Self(98);
    pub const R32_SINT: Self = Self(99);
    pub const R32_SFLOAT: Self = Self(100);
    pub const R32G32_UINT: Self = Self(101);
    pub const R32G32_SINT: Self = Self(102);
    pub const R32G32_SFLOAT: Self = Self(103);
    pub const R32G32B32_UINT: Self = Self(104);
    pub const R32G32B32_SINT: Self = Self(105);
    pub const R32G32B32_SFLOAT: Self = Self(106);
    pub const R32G32B32A32_UINT: Self = Self(107);
    pub const R32G32B32A32_SINT: Self = Self(108);
    pub const R32G32B32A32_SFLOAT: Self = Self(109);
    pub const R64_UINT: Self = Self(110);
    pub const R64_SINT: Self = Self(111);
    pub const R64_SFLOAT: Self = Self(112);
    pub const R64G64_UINT: Self = Self(113);
    pub const R64G64_SINT: Self = Self(114);
    pub const R64G64_SFLOAT: Self = Self(115);
    pub const R64G64B64_UINT: Self = Self(116);
    pub const R64G64B64_SINT: Self = Self(117);
    pub const R64G64B64_SFLOAT: Self = Self(118);
    pub const R64G64B64A64_UINT: Self = Self(119);
    pub const R64G64B64A64_SINT: Self = Self(120);
    pub const R64G64B64A64_SFLOAT: Self = Self(121);
    pub const B10G11R11_UFLOAT_PACK32: Self = Self(122);
    pub const E5B9G9R9_UFLOAT_PACK32: Self = Self(123);
    pub const D16_UNORM: Self = Self(124);
    pub const X8_D24_UNORM_PACK32: Self = Self(125);
    pub const D32_SFLOAT: Self = Self(126);
    pub const S8_UINT: Self = Self(127);
    pub const D16_UNORM_S8_UINT: Self = Self(128);
    pub const D24_UNORM_S8_UINT: Self = Self(129);
    pub const D32_SFLOAT_S8_UINT: Self = Self(130);
    pub const BC1_RGB_UNORM_BLOCK: Self = Self(131);
    pub const BC1_RGB_SRGB_BLOCK: Self = Self(132);
    pub const BC1_RGBA_UNORM_BLOCK: Self = Self(133);
    pub const BC1_RGBA_SRGB_BLOCK: Self = Self(134);
    pub const BC2_UNORM_BLOCK: Self = Self(135);
    pub const BC2_SRGB_BLOCK: Self = Self(136);
    pub const BC3_UNORM_BLOCK: Self = Self(137);
    pub const BC3_SRGB_BLOCK: Self = Self(138);
    pub const BC4_UNORM_BLOCK: Self = Self(139);
    pub const BC4_SNORM_BLOCK: Self = Self(140);
    pub const BC5_UNORM_BLOCK: Self = Self(141);
    pub const BC5_SNORM_BLOCK: Self = Self(142);
    pub const BC6H_UFLOAT_BLOCK: Self = Self(143);
    pub const BC6H_SFLOAT_BLOCK: Self = Self(144);
    pub const BC7_UNORM_BLOCK: Self = Self(145);
    pub const BC7_SRGB_BLOCK: Self = Self(146);
    pub const ETC2_R8G8B8_UNORM_BLOCK: Self = Self(147);
    pub const ETC2_R8G8B8_SRGB_BLOCK: Self = Self(148);
    pub const ETC2_R8G8B8A1_UNORM_BLOCK: Self = Self(149);
    pub const ETC2_R8G8B8A1_SRGB_BLOCK: Self = Self(150);
    pub const ETC2_R8G8B8A8_UNORM_BLOCK: Self = Self(151);
    pub const ETC2_R8G8B8A8_SRGB_BLOCK: Self = Self(152);
    pub const EAC_R11_UNORM_BLOCK: Self = Self(153);
    pub const EAC_R11_SNORM_BLOCK: Self = Self(154);
    pub const EAC_R11G11_UNORM_BLOCK: Self = Self(155);
    pub const EAC_R11G11_SNORM_BLOCK: Self = Self(156);
    pub const ASTC_4X4_UNORM_BLOCK: Self = Self(157);
    pub const ASTC_4X4_SRGB_BLOCK: Self = Self(158);
    pub const ASTC_5X4_UNORM_BLOCK: Self = Self(159);
    pub const ASTC_5X4_SRGB_BLOCK: Self = Self(160);
    pub const ASTC_5X5_UNORM_BLOCK: Self = Self(161);
    pub const ASTC_5X5_SRGB_BLOCK: Self = Self(162);
    pub const ASTC_6X5_UNORM_BLOCK: Self = Self(163);
    pub const ASTC_6X5_SRGB_BLOCK: Self = Self(164);
    pub const ASTC_6X6_UNORM_BLOCK: Self = Self(165);
    pub const ASTC_6X6_SRGB_BLOCK: Self = Self(166);
    pub const ASTC_8X5_UNORM_BLOCK: Self = Self(167);
    pub const ASTC_8X5_SRGB_BLOCK: Self = Self(168);
    pub const ASTC_8X6_UNORM_BLOCK: Self = Self(169);
    pub const ASTC_8X6_SRGB_BLOCK: Self = Self(170);
    pub const ASTC_8X8_UNORM_BLOCK: Self = Self(171);
    pub const ASTC_8X8_SRGB_BLOCK: Self = Self(172);
    pub const ASTC_10X5_UNORM_BLOCK: Self = Self(173);
    pub const ASTC_10X5_SRGB_BLOCK: Self = Self(174);
    pub const ASTC_10X6_UNORM_BLOCK: Self = Self(175);
    pub const ASTC_10X6_SRGB_BLOCK: Self = Self(176);
    pub const ASTC_10X8_UNORM_BLOCK: Self = Self(177);
    pub const ASTC_10X8_SRGB_BLOCK: Self = Self(178);
    pub const ASTC_10X10_UNORM_BLOCK: Self = Self(179);
    pub const ASTC_10X10_SRGB_BLOCK: Self = Self(180);
    pub const ASTC_12X10_UNORM_BLOCK: Self = Self(181);
    pub const ASTC_12X10_SRGB_BLOCK: Self = Self(182);
    pub const ASTC_12X12_UNORM_BLOCK: Self = Self(183);
    pub const ASTC_12X12_SRGB_BLOCK: Self = Self(184);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl Format {
    pub const G8B8G8R8_422_UNORM: Self = Self(1000156000);
    pub const B8G8R8G8_422_UNORM: Self = Self(1000156001);
    pub const G8_B8_R8_3PLANE_420_UNORM: Self = Self(1000156002);
    pub const G8_B8R8_2PLANE_420_UNORM: Self = Self(1000156003);
    pub const G8_B8_R8_3PLANE_422_UNORM: Self = Self(1000156004);
    pub const G8_B8R8_2PLANE_422_UNORM: Self = Self(1000156005);
    pub const G8_B8_R8_3PLANE_444_UNORM: Self = Self(1000156006);
    pub const R10X6_UNORM_PACK16: Self = Self(1000156007);
    pub const R10X6G10X6_UNORM_2PACK16: Self = Self(1000156008);
    pub const R10X6G10X6B10X6A10X6_UNORM_4PACK16: Self = Self(1000156009);
    pub const G10X6B10X6G10X6R10X6_422_UNORM_4PACK16: Self = Self(1000156010);
    pub const B10X6G10X6R10X6G10X6_422_UNORM_4PACK16: Self = Self(1000156011);
    pub const G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16: Self = Self(1000156012);
    pub const G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16: Self = Self(1000156013);
    pub const G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16: Self = Self(1000156014);
    pub const G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16: Self = Self(1000156015);
    pub const G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16: Self = Self(1000156016);
    pub const R12X4_UNORM_PACK16: Self = Self(1000156017);
    pub const R12X4G12X4_UNORM_2PACK16: Self = Self(1000156018);
    pub const R12X4G12X4B12X4A12X4_UNORM_4PACK16: Self = Self(1000156019);
    pub const G12X4B12X4G12X4R12X4_422_UNORM_4PACK16: Self = Self(1000156020);
    pub const B12X4G12X4R12X4G12X4_422_UNORM_4PACK16: Self = Self(1000156021);
    pub const G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16: Self = Self(1000156022);
    pub const G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16: Self = Self(1000156023);
    pub const G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16: Self = Self(1000156024);
    pub const G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16: Self = Self(1000156025);
    pub const G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16: Self = Self(1000156026);
    pub const G16B16G16R16_422_UNORM: Self = Self(1000156027);
    pub const B16G16R16G16_422_UNORM: Self = Self(1000156028);
    pub const G16_B16_R16_3PLANE_420_UNORM: Self = Self(1000156029);
    pub const G16_B16R16_2PLANE_420_UNORM: Self = Self(1000156030);
    pub const G16_B16_R16_3PLANE_422_UNORM: Self = Self(1000156031);
    pub const G16_B16R16_2PLANE_422_UNORM: Self = Self(1000156032);
    pub const G16_B16_R16_3PLANE_444_UNORM: Self = Self(1000156033);
}
#[doc = "Provided by [`crate::extensions::img_format_pvrtc`]"]
impl Format {
    pub const PVRTC1_2BPP_UNORM_BLOCK_IMG: Self = Self(1000054000);
    pub const PVRTC1_4BPP_UNORM_BLOCK_IMG: Self = Self(1000054001);
    pub const PVRTC2_2BPP_UNORM_BLOCK_IMG: Self = Self(1000054002);
    pub const PVRTC2_4BPP_UNORM_BLOCK_IMG: Self = Self(1000054003);
    pub const PVRTC1_2BPP_SRGB_BLOCK_IMG: Self = Self(1000054004);
    pub const PVRTC1_4BPP_SRGB_BLOCK_IMG: Self = Self(1000054005);
    pub const PVRTC2_2BPP_SRGB_BLOCK_IMG: Self = Self(1000054006);
    pub const PVRTC2_4BPP_SRGB_BLOCK_IMG: Self = Self(1000054007);
}
#[doc = "Provided by [`crate::extensions::ext_texture_compression_astc_hdr`]"]
impl Format {
    pub const ASTC_4X4_SFLOAT_BLOCK_EXT: Self = Self(1000066000);
    pub const ASTC_5X4_SFLOAT_BLOCK_EXT: Self = Self(1000066001);
    pub const ASTC_5X5_SFLOAT_BLOCK_EXT: Self = Self(1000066002);
    pub const ASTC_6X5_SFLOAT_BLOCK_EXT: Self = Self(1000066003);
    pub const ASTC_6X6_SFLOAT_BLOCK_EXT: Self = Self(1000066004);
    pub const ASTC_8X5_SFLOAT_BLOCK_EXT: Self = Self(1000066005);
    pub const ASTC_8X6_SFLOAT_BLOCK_EXT: Self = Self(1000066006);
    pub const ASTC_8X8_SFLOAT_BLOCK_EXT: Self = Self(1000066007);
    pub const ASTC_10X5_SFLOAT_BLOCK_EXT: Self = Self(1000066008);
    pub const ASTC_10X6_SFLOAT_BLOCK_EXT: Self = Self(1000066009);
    pub const ASTC_10X8_SFLOAT_BLOCK_EXT: Self = Self(1000066010);
    pub const ASTC_10X10_SFLOAT_BLOCK_EXT: Self = Self(1000066011);
    pub const ASTC_12X10_SFLOAT_BLOCK_EXT: Self = Self(1000066012);
    pub const ASTC_12X12_SFLOAT_BLOCK_EXT: Self = Self(1000066013);
}
#[doc = "Provided by [`crate::extensions::ext_4444_formats`]"]
impl Format {
    pub const A4R4G4B4_UNORM_PACK16_EXT: Self = Self(1000340000);
    pub const A4B4G4R4_UNORM_PACK16_EXT: Self = Self(1000340001);
}
#[doc = "Provided by [`crate::extensions::khr_sampler_ycbcr_conversion`]"]
impl Format {
    pub const G8B8G8R8_422_UNORM_KHR: Self = Self::G8B8G8R8_422_UNORM;
    pub const B8G8R8G8_422_UNORM_KHR: Self = Self::B8G8R8G8_422_UNORM;
    pub const G8_B8_R8_3PLANE_420_UNORM_KHR: Self = Self::G8_B8_R8_3PLANE_420_UNORM;
    pub const G8_B8R8_2PLANE_420_UNORM_KHR: Self = Self::G8_B8R8_2PLANE_420_UNORM;
    pub const G8_B8_R8_3PLANE_422_UNORM_KHR: Self = Self::G8_B8_R8_3PLANE_422_UNORM;
    pub const G8_B8R8_2PLANE_422_UNORM_KHR: Self = Self::G8_B8R8_2PLANE_422_UNORM;
    pub const G8_B8_R8_3PLANE_444_UNORM_KHR: Self = Self::G8_B8_R8_3PLANE_444_UNORM;
    pub const R10X6_UNORM_PACK16_KHR: Self = Self::R10X6_UNORM_PACK16;
    pub const R10X6G10X6_UNORM_2PACK16_KHR: Self = Self::R10X6G10X6_UNORM_2PACK16;
    pub const R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR: Self =
        Self::R10X6G10X6B10X6A10X6_UNORM_4PACK16;
    pub const G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR: Self =
        Self::G10X6B10X6G10X6R10X6_422_UNORM_4PACK16;
    pub const B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR: Self =
        Self::B10X6G10X6R10X6G10X6_422_UNORM_4PACK16;
    pub const G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR: Self =
        Self::G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16;
    pub const G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR: Self =
        Self::G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16;
    pub const G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR: Self =
        Self::G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16;
    pub const G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR: Self =
        Self::G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16;
    pub const G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR: Self =
        Self::G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16;
    pub const R12X4_UNORM_PACK16_KHR: Self = Self::R12X4_UNORM_PACK16;
    pub const R12X4G12X4_UNORM_2PACK16_KHR: Self = Self::R12X4G12X4_UNORM_2PACK16;
    pub const R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR: Self =
        Self::R12X4G12X4B12X4A12X4_UNORM_4PACK16;
    pub const G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR: Self =
        Self::G12X4B12X4G12X4R12X4_422_UNORM_4PACK16;
    pub const B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR: Self =
        Self::B12X4G12X4R12X4G12X4_422_UNORM_4PACK16;
    pub const G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR: Self =
        Self::G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16;
    pub const G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR: Self =
        Self::G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16;
    pub const G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR: Self =
        Self::G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16;
    pub const G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR: Self =
        Self::G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16;
    pub const G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR: Self =
        Self::G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16;
    pub const G16B16G16R16_422_UNORM_KHR: Self = Self::G16B16G16R16_422_UNORM;
    pub const B16G16R16G16_422_UNORM_KHR: Self = Self::B16G16R16G16_422_UNORM;
    pub const G16_B16_R16_3PLANE_420_UNORM_KHR: Self = Self::G16_B16_R16_3PLANE_420_UNORM;
    pub const G16_B16R16_2PLANE_420_UNORM_KHR: Self = Self::G16_B16R16_2PLANE_420_UNORM;
    pub const G16_B16_R16_3PLANE_422_UNORM_KHR: Self = Self::G16_B16_R16_3PLANE_422_UNORM;
    pub const G16_B16R16_2PLANE_422_UNORM_KHR: Self = Self::G16_B16R16_2PLANE_422_UNORM;
    pub const G16_B16_R16_3PLANE_444_UNORM_KHR: Self = Self::G16_B16_R16_3PLANE_444_UNORM;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormatFeatureFlags.html) · Bitmask of [`FormatFeatureFlagBits`]"] # [doc (alias = "VkFormatFeatureFlags")] # [derive (Default)] # [repr (transparent)] pub struct FormatFeatureFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const SAMPLED_IMAGE = FormatFeatureFlagBits :: SAMPLED_IMAGE . 0 ; const STORAGE_IMAGE = FormatFeatureFlagBits :: STORAGE_IMAGE . 0 ; const STORAGE_IMAGE_ATOMIC = FormatFeatureFlagBits :: STORAGE_IMAGE_ATOMIC . 0 ; const UNIFORM_TEXEL_BUFFER = FormatFeatureFlagBits :: UNIFORM_TEXEL_BUFFER . 0 ; const STORAGE_TEXEL_BUFFER = FormatFeatureFlagBits :: STORAGE_TEXEL_BUFFER . 0 ; const STORAGE_TEXEL_BUFFER_ATOMIC = FormatFeatureFlagBits :: STORAGE_TEXEL_BUFFER_ATOMIC . 0 ; const VERTEX_BUFFER = FormatFeatureFlagBits :: VERTEX_BUFFER . 0 ; const COLOR_ATTACHMENT = FormatFeatureFlagBits :: COLOR_ATTACHMENT . 0 ; const COLOR_ATTACHMENT_BLEND = FormatFeatureFlagBits :: COLOR_ATTACHMENT_BLEND . 0 ; const DEPTH_STENCIL_ATTACHMENT = FormatFeatureFlagBits :: DEPTH_STENCIL_ATTACHMENT . 0 ; const BLIT_SRC = FormatFeatureFlagBits :: BLIT_SRC . 0 ; const BLIT_DST = FormatFeatureFlagBits :: BLIT_DST . 0 ; const SAMPLED_IMAGE_FILTER_LINEAR = FormatFeatureFlagBits :: SAMPLED_IMAGE_FILTER_LINEAR . 0 ; const TRANSFER_SRC = FormatFeatureFlagBits :: TRANSFER_SRC . 0 ; const TRANSFER_DST = FormatFeatureFlagBits :: TRANSFER_DST . 0 ; const MIDPOINT_CHROMA_SAMPLES = FormatFeatureFlagBits :: MIDPOINT_CHROMA_SAMPLES . 0 ; const SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER = FormatFeatureFlagBits :: SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER . 0 ; const SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER = FormatFeatureFlagBits :: SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER . 0 ; const SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT = FormatFeatureFlagBits :: SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT . 0 ; const SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE = FormatFeatureFlagBits :: SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE . 0 ; const DISJOINT = FormatFeatureFlagBits :: DISJOINT . 0 ; const COSITED_CHROMA_SAMPLES = FormatFeatureFlagBits :: COSITED_CHROMA_SAMPLES . 0 ; const SAMPLED_IMAGE_FILTER_MINMAX = FormatFeatureFlagBits :: SAMPLED_IMAGE_FILTER_MINMAX . 0 ; const SAMPLED_IMAGE_FILTER_CUBIC_IMG = FormatFeatureFlagBits :: SAMPLED_IMAGE_FILTER_CUBIC_IMG . 0 ; const ACCELERATION_STRUCTURE_VERTEX_BUFFER_KHR = FormatFeatureFlagBits :: ACCELERATION_STRUCTURE_VERTEX_BUFFER_KHR . 0 ; const FRAGMENT_DENSITY_MAP_EXT = FormatFeatureFlagBits :: FRAGMENT_DENSITY_MAP_EXT . 0 ; const FRAGMENT_SHADING_RATE_ATTACHMENT_KHR = FormatFeatureFlagBits :: FRAGMENT_SHADING_RATE_ATTACHMENT_KHR . 0 ; const TRANSFER_SRC_KHR = FormatFeatureFlagBits :: TRANSFER_SRC_KHR . 0 ; const TRANSFER_DST_KHR = FormatFeatureFlagBits :: TRANSFER_DST_KHR . 0 ; const SAMPLED_IMAGE_FILTER_MINMAX_EXT = FormatFeatureFlagBits :: SAMPLED_IMAGE_FILTER_MINMAX_EXT . 0 ; const MIDPOINT_CHROMA_SAMPLES_KHR = FormatFeatureFlagBits :: MIDPOINT_CHROMA_SAMPLES_KHR . 0 ; const SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_KHR = FormatFeatureFlagBits :: SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_KHR . 0 ; const SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_KHR = FormatFeatureFlagBits :: SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_KHR . 0 ; const SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_KHR = FormatFeatureFlagBits :: SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_KHR . 0 ; const SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_KHR = FormatFeatureFlagBits :: SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_KHR . 0 ; const DISJOINT_KHR = FormatFeatureFlagBits :: DISJOINT_KHR . 0 ; const COSITED_CHROMA_SAMPLES_KHR = FormatFeatureFlagBits :: COSITED_CHROMA_SAMPLES_KHR . 0 ; const SAMPLED_IMAGE_FILTER_CUBIC_EXT = FormatFeatureFlagBits :: SAMPLED_IMAGE_FILTER_CUBIC_EXT . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormatFeatureFlagBits.html) · Bits enum of [`FormatFeatureFlags`]"]
#[doc(alias = "VkFormatFeatureFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct FormatFeatureFlagBits(pub u32);
impl FormatFeatureFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> FormatFeatureFlags {
        FormatFeatureFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for FormatFeatureFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::SAMPLED_IMAGE => "SAMPLED_IMAGE",
            &Self::STORAGE_IMAGE => "STORAGE_IMAGE",
            &Self::STORAGE_IMAGE_ATOMIC => "STORAGE_IMAGE_ATOMIC",
            &Self::UNIFORM_TEXEL_BUFFER => "UNIFORM_TEXEL_BUFFER",
            &Self::STORAGE_TEXEL_BUFFER => "STORAGE_TEXEL_BUFFER",
            &Self::STORAGE_TEXEL_BUFFER_ATOMIC => "STORAGE_TEXEL_BUFFER_ATOMIC",
            &Self::VERTEX_BUFFER => "VERTEX_BUFFER",
            &Self::COLOR_ATTACHMENT => "COLOR_ATTACHMENT",
            &Self::COLOR_ATTACHMENT_BLEND => "COLOR_ATTACHMENT_BLEND",
            &Self::DEPTH_STENCIL_ATTACHMENT => "DEPTH_STENCIL_ATTACHMENT",
            &Self::BLIT_SRC => "BLIT_SRC",
            &Self::BLIT_DST => "BLIT_DST",
            &Self::SAMPLED_IMAGE_FILTER_LINEAR => "SAMPLED_IMAGE_FILTER_LINEAR",
            &Self::TRANSFER_SRC => "TRANSFER_SRC",
            &Self::TRANSFER_DST => "TRANSFER_DST",
            &Self::MIDPOINT_CHROMA_SAMPLES => "MIDPOINT_CHROMA_SAMPLES",
            &Self::SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER => {
                "SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER"
            }
            &Self::SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER => {
                "SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER"
            }
            &Self::SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT => {
                "SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT"
            }
            &Self::SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE => {
                "SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE"
            }
            &Self::DISJOINT => "DISJOINT",
            &Self::COSITED_CHROMA_SAMPLES => "COSITED_CHROMA_SAMPLES",
            &Self::SAMPLED_IMAGE_FILTER_MINMAX => "SAMPLED_IMAGE_FILTER_MINMAX",
            &Self::SAMPLED_IMAGE_FILTER_CUBIC_IMG => "SAMPLED_IMAGE_FILTER_CUBIC_IMG",
            &Self::ACCELERATION_STRUCTURE_VERTEX_BUFFER_KHR => {
                "ACCELERATION_STRUCTURE_VERTEX_BUFFER_KHR"
            }
            &Self::FRAGMENT_DENSITY_MAP_EXT => "FRAGMENT_DENSITY_MAP_EXT",
            &Self::FRAGMENT_SHADING_RATE_ATTACHMENT_KHR => "FRAGMENT_SHADING_RATE_ATTACHMENT_KHR",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl FormatFeatureFlagBits {
    pub const SAMPLED_IMAGE: Self = Self(1);
    pub const STORAGE_IMAGE: Self = Self(2);
    pub const STORAGE_IMAGE_ATOMIC: Self = Self(4);
    pub const UNIFORM_TEXEL_BUFFER: Self = Self(8);
    pub const STORAGE_TEXEL_BUFFER: Self = Self(16);
    pub const STORAGE_TEXEL_BUFFER_ATOMIC: Self = Self(32);
    pub const VERTEX_BUFFER: Self = Self(64);
    pub const COLOR_ATTACHMENT: Self = Self(128);
    pub const COLOR_ATTACHMENT_BLEND: Self = Self(256);
    pub const DEPTH_STENCIL_ATTACHMENT: Self = Self(512);
    pub const BLIT_SRC: Self = Self(1024);
    pub const BLIT_DST: Self = Self(2048);
    pub const SAMPLED_IMAGE_FILTER_LINEAR: Self = Self(4096);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl FormatFeatureFlagBits {
    pub const TRANSFER_SRC: Self = Self(16384);
    pub const TRANSFER_DST: Self = Self(32768);
    pub const MIDPOINT_CHROMA_SAMPLES: Self = Self(131072);
    pub const SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER: Self = Self(262144);
    pub const SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER: Self = Self(524288);
    pub const SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT: Self = Self(1048576);
    pub const SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE: Self =
        Self(2097152);
    pub const DISJOINT: Self = Self(4194304);
    pub const COSITED_CHROMA_SAMPLES: Self = Self(8388608);
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl FormatFeatureFlagBits {
    pub const SAMPLED_IMAGE_FILTER_MINMAX: Self = Self(65536);
}
#[doc = "Provided by [`crate::extensions::img_filter_cubic`]"]
impl FormatFeatureFlagBits {
    pub const SAMPLED_IMAGE_FILTER_CUBIC_IMG: Self = Self(8192);
}
#[doc = "Provided by [`crate::extensions::khr_acceleration_structure`]"]
impl FormatFeatureFlagBits {
    pub const ACCELERATION_STRUCTURE_VERTEX_BUFFER_KHR: Self = Self(536870912);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map`]"]
impl FormatFeatureFlagBits {
    pub const FRAGMENT_DENSITY_MAP_EXT: Self = Self(16777216);
}
#[doc = "Provided by [`crate::extensions::khr_fragment_shading_rate`]"]
impl FormatFeatureFlagBits {
    pub const FRAGMENT_SHADING_RATE_ATTACHMENT_KHR: Self = Self(1073741824);
}
#[doc = "Provided by [`crate::extensions::khr_maintenance1`]"]
impl FormatFeatureFlagBits {
    pub const TRANSFER_SRC_KHR: Self = Self::TRANSFER_SRC;
    pub const TRANSFER_DST_KHR: Self = Self::TRANSFER_DST;
}
#[doc = "Provided by [`crate::extensions::ext_sampler_filter_minmax`]"]
impl FormatFeatureFlagBits {
    pub const SAMPLED_IMAGE_FILTER_MINMAX_EXT: Self = Self::SAMPLED_IMAGE_FILTER_MINMAX;
}
#[doc = "Provided by [`crate::extensions::khr_sampler_ycbcr_conversion`]"]
impl FormatFeatureFlagBits {
    pub const MIDPOINT_CHROMA_SAMPLES_KHR: Self = Self::MIDPOINT_CHROMA_SAMPLES;
    pub const SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_KHR: Self =
        Self::SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER;
    pub const SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_KHR: Self =
        Self::SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER;
    pub const SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_KHR: Self =
        Self::SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT;
    pub const SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_KHR: Self =
        Self::SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE;
    pub const DISJOINT_KHR: Self = Self::DISJOINT;
    pub const COSITED_CHROMA_SAMPLES_KHR: Self = Self::COSITED_CHROMA_SAMPLES;
}
#[doc = "Provided by [`crate::extensions::ext_filter_cubic`]"]
impl FormatFeatureFlagBits {
    pub const SAMPLED_IMAGE_FILTER_CUBIC_EXT: Self = Self::SAMPLED_IMAGE_FILTER_CUBIC_IMG;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFrontFace.html) · Enum"]
#[doc(alias = "VkFrontFace")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct FrontFace(pub i32);
impl std::fmt::Debug for FrontFace {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::COUNTER_CLOCKWISE => "COUNTER_CLOCKWISE",
            &Self::CLOCKWISE => "CLOCKWISE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl FrontFace {
    pub const COUNTER_CLOCKWISE: Self = Self(0);
    pub const CLOCKWISE: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageAspectFlags.html) · Bitmask of [`ImageAspectFlagBits`]"] # [doc (alias = "VkImageAspectFlags")] # [derive (Default)] # [repr (transparent)] pub struct ImageAspectFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const COLOR = ImageAspectFlagBits :: COLOR . 0 ; const DEPTH = ImageAspectFlagBits :: DEPTH . 0 ; const STENCIL = ImageAspectFlagBits :: STENCIL . 0 ; const METADATA = ImageAspectFlagBits :: METADATA . 0 ; const PLANE_0 = ImageAspectFlagBits :: PLANE_0 . 0 ; const PLANE_1 = ImageAspectFlagBits :: PLANE_1 . 0 ; const PLANE_2 = ImageAspectFlagBits :: PLANE_2 . 0 ; const MEMORY_PLANE_0_EXT = ImageAspectFlagBits :: MEMORY_PLANE_0_EXT . 0 ; const MEMORY_PLANE_1_EXT = ImageAspectFlagBits :: MEMORY_PLANE_1_EXT . 0 ; const MEMORY_PLANE_2_EXT = ImageAspectFlagBits :: MEMORY_PLANE_2_EXT . 0 ; const MEMORY_PLANE_3_EXT = ImageAspectFlagBits :: MEMORY_PLANE_3_EXT . 0 ; const PLANE_0_KHR = ImageAspectFlagBits :: PLANE_0_KHR . 0 ; const PLANE_1_KHR = ImageAspectFlagBits :: PLANE_1_KHR . 0 ; const PLANE_2_KHR = ImageAspectFlagBits :: PLANE_2_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageAspectFlagBits.html) · Bits enum of [`ImageAspectFlags`]"]
#[doc(alias = "VkImageAspectFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ImageAspectFlagBits(pub u32);
impl ImageAspectFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> ImageAspectFlags {
        ImageAspectFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for ImageAspectFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::COLOR => "COLOR",
            &Self::DEPTH => "DEPTH",
            &Self::STENCIL => "STENCIL",
            &Self::METADATA => "METADATA",
            &Self::PLANE_0 => "PLANE_0",
            &Self::PLANE_1 => "PLANE_1",
            &Self::PLANE_2 => "PLANE_2",
            &Self::MEMORY_PLANE_0_EXT => "MEMORY_PLANE_0_EXT",
            &Self::MEMORY_PLANE_1_EXT => "MEMORY_PLANE_1_EXT",
            &Self::MEMORY_PLANE_2_EXT => "MEMORY_PLANE_2_EXT",
            &Self::MEMORY_PLANE_3_EXT => "MEMORY_PLANE_3_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ImageAspectFlagBits {
    pub const COLOR: Self = Self(1);
    pub const DEPTH: Self = Self(2);
    pub const STENCIL: Self = Self(4);
    pub const METADATA: Self = Self(8);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl ImageAspectFlagBits {
    pub const PLANE_0: Self = Self(16);
    pub const PLANE_1: Self = Self(32);
    pub const PLANE_2: Self = Self(64);
}
#[doc = "Provided by [`crate::extensions::ext_image_drm_format_modifier`]"]
impl ImageAspectFlagBits {
    pub const MEMORY_PLANE_0_EXT: Self = Self(128);
    pub const MEMORY_PLANE_1_EXT: Self = Self(256);
    pub const MEMORY_PLANE_2_EXT: Self = Self(512);
    pub const MEMORY_PLANE_3_EXT: Self = Self(1024);
}
#[doc = "Provided by [`crate::extensions::khr_sampler_ycbcr_conversion`]"]
impl ImageAspectFlagBits {
    pub const PLANE_0_KHR: Self = Self::PLANE_0;
    pub const PLANE_1_KHR: Self = Self::PLANE_1;
    pub const PLANE_2_KHR: Self = Self::PLANE_2;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageCreateFlags.html) · Bitmask of [`ImageCreateFlagBits`]"] # [doc (alias = "VkImageCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct ImageCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const SPARSE_BINDING = ImageCreateFlagBits :: SPARSE_BINDING . 0 ; const SPARSE_RESIDENCY = ImageCreateFlagBits :: SPARSE_RESIDENCY . 0 ; const SPARSE_ALIASED = ImageCreateFlagBits :: SPARSE_ALIASED . 0 ; const MUTABLE_FORMAT = ImageCreateFlagBits :: MUTABLE_FORMAT . 0 ; const CUBE_COMPATIBLE = ImageCreateFlagBits :: CUBE_COMPATIBLE . 0 ; const ALIAS = ImageCreateFlagBits :: ALIAS . 0 ; const SPLIT_INSTANCE_BIND_REGIONS = ImageCreateFlagBits :: SPLIT_INSTANCE_BIND_REGIONS . 0 ; const _2D_ARRAY_COMPATIBLE = ImageCreateFlagBits :: _2D_ARRAY_COMPATIBLE . 0 ; const BLOCK_TEXEL_VIEW_COMPATIBLE = ImageCreateFlagBits :: BLOCK_TEXEL_VIEW_COMPATIBLE . 0 ; const EXTENDED_USAGE = ImageCreateFlagBits :: EXTENDED_USAGE . 0 ; const PROTECTED = ImageCreateFlagBits :: PROTECTED . 0 ; const DISJOINT = ImageCreateFlagBits :: DISJOINT . 0 ; const CORNER_SAMPLED_NV = ImageCreateFlagBits :: CORNER_SAMPLED_NV . 0 ; const SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_EXT = ImageCreateFlagBits :: SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_EXT . 0 ; const SUBSAMPLED_EXT = ImageCreateFlagBits :: SUBSAMPLED_EXT . 0 ; const SPLIT_INSTANCE_BIND_REGIONS_KHR = ImageCreateFlagBits :: SPLIT_INSTANCE_BIND_REGIONS_KHR . 0 ; const _2D_ARRAY_COMPATIBLE_KHR = ImageCreateFlagBits :: _2D_ARRAY_COMPATIBLE_KHR . 0 ; const BLOCK_TEXEL_VIEW_COMPATIBLE_KHR = ImageCreateFlagBits :: BLOCK_TEXEL_VIEW_COMPATIBLE_KHR . 0 ; const EXTENDED_USAGE_KHR = ImageCreateFlagBits :: EXTENDED_USAGE_KHR . 0 ; const DISJOINT_KHR = ImageCreateFlagBits :: DISJOINT_KHR . 0 ; const ALIAS_KHR = ImageCreateFlagBits :: ALIAS_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageCreateFlagBits.html) · Bits enum of [`ImageCreateFlags`]"]
#[doc(alias = "VkImageCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ImageCreateFlagBits(pub u32);
impl ImageCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> ImageCreateFlags {
        ImageCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for ImageCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::SPARSE_BINDING => "SPARSE_BINDING",
            &Self::SPARSE_RESIDENCY => "SPARSE_RESIDENCY",
            &Self::SPARSE_ALIASED => "SPARSE_ALIASED",
            &Self::MUTABLE_FORMAT => "MUTABLE_FORMAT",
            &Self::CUBE_COMPATIBLE => "CUBE_COMPATIBLE",
            &Self::ALIAS => "ALIAS",
            &Self::SPLIT_INSTANCE_BIND_REGIONS => "SPLIT_INSTANCE_BIND_REGIONS",
            &Self::_2D_ARRAY_COMPATIBLE => "_2D_ARRAY_COMPATIBLE",
            &Self::BLOCK_TEXEL_VIEW_COMPATIBLE => "BLOCK_TEXEL_VIEW_COMPATIBLE",
            &Self::EXTENDED_USAGE => "EXTENDED_USAGE",
            &Self::PROTECTED => "PROTECTED",
            &Self::DISJOINT => "DISJOINT",
            &Self::CORNER_SAMPLED_NV => "CORNER_SAMPLED_NV",
            &Self::SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_EXT => "SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_EXT",
            &Self::SUBSAMPLED_EXT => "SUBSAMPLED_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ImageCreateFlagBits {
    pub const SPARSE_BINDING: Self = Self(1);
    pub const SPARSE_RESIDENCY: Self = Self(2);
    pub const SPARSE_ALIASED: Self = Self(4);
    pub const MUTABLE_FORMAT: Self = Self(8);
    pub const CUBE_COMPATIBLE: Self = Self(16);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl ImageCreateFlagBits {
    pub const ALIAS: Self = Self(1024);
    pub const SPLIT_INSTANCE_BIND_REGIONS: Self = Self(64);
    pub const _2D_ARRAY_COMPATIBLE: Self = Self(32);
    pub const BLOCK_TEXEL_VIEW_COMPATIBLE: Self = Self(128);
    pub const EXTENDED_USAGE: Self = Self(256);
    pub const PROTECTED: Self = Self(2048);
    pub const DISJOINT: Self = Self(512);
}
#[doc = "Provided by [`crate::extensions::nv_corner_sampled_image`]"]
impl ImageCreateFlagBits {
    pub const CORNER_SAMPLED_NV: Self = Self(8192);
}
#[doc = "Provided by [`crate::extensions::ext_sample_locations`]"]
impl ImageCreateFlagBits {
    pub const SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_EXT: Self = Self(4096);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map`]"]
impl ImageCreateFlagBits {
    pub const SUBSAMPLED_EXT: Self = Self(16384);
}
#[doc = "Provided by [`crate::extensions::khr_device_group`]"]
impl ImageCreateFlagBits {
    pub const SPLIT_INSTANCE_BIND_REGIONS_KHR: Self = Self::SPLIT_INSTANCE_BIND_REGIONS;
}
#[doc = "Provided by [`crate::extensions::khr_maintenance1`]"]
impl ImageCreateFlagBits {
    pub const _2D_ARRAY_COMPATIBLE_KHR: Self = Self::_2D_ARRAY_COMPATIBLE;
}
#[doc = "Provided by [`crate::extensions::khr_maintenance2`]"]
impl ImageCreateFlagBits {
    pub const BLOCK_TEXEL_VIEW_COMPATIBLE_KHR: Self = Self::BLOCK_TEXEL_VIEW_COMPATIBLE;
    pub const EXTENDED_USAGE_KHR: Self = Self::EXTENDED_USAGE;
}
#[doc = "Provided by [`crate::extensions::khr_sampler_ycbcr_conversion`]"]
impl ImageCreateFlagBits {
    pub const DISJOINT_KHR: Self = Self::DISJOINT;
}
#[doc = "Provided by [`crate::extensions::khr_bind_memory2`]"]
impl ImageCreateFlagBits {
    pub const ALIAS_KHR: Self = Self::ALIAS;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageLayout.html) · Enum"]
#[doc(alias = "VkImageLayout")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ImageLayout(pub i32);
impl std::fmt::Debug for ImageLayout {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::UNDEFINED => "UNDEFINED",
            &Self::GENERAL => "GENERAL",
            &Self::COLOR_ATTACHMENT_OPTIMAL => "COLOR_ATTACHMENT_OPTIMAL",
            &Self::DEPTH_STENCIL_ATTACHMENT_OPTIMAL => "DEPTH_STENCIL_ATTACHMENT_OPTIMAL",
            &Self::DEPTH_STENCIL_READ_ONLY_OPTIMAL => "DEPTH_STENCIL_READ_ONLY_OPTIMAL",
            &Self::SHADER_READ_ONLY_OPTIMAL => "SHADER_READ_ONLY_OPTIMAL",
            &Self::TRANSFER_SRC_OPTIMAL => "TRANSFER_SRC_OPTIMAL",
            &Self::TRANSFER_DST_OPTIMAL => "TRANSFER_DST_OPTIMAL",
            &Self::PREINITIALIZED => "PREINITIALIZED",
            &Self::DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL => {
                "DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL"
            }
            &Self::DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL => {
                "DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL"
            }
            &Self::DEPTH_ATTACHMENT_OPTIMAL => "DEPTH_ATTACHMENT_OPTIMAL",
            &Self::DEPTH_READ_ONLY_OPTIMAL => "DEPTH_READ_ONLY_OPTIMAL",
            &Self::STENCIL_ATTACHMENT_OPTIMAL => "STENCIL_ATTACHMENT_OPTIMAL",
            &Self::STENCIL_READ_ONLY_OPTIMAL => "STENCIL_READ_ONLY_OPTIMAL",
            &Self::PRESENT_SRC_KHR => "PRESENT_SRC_KHR",
            &Self::SHARED_PRESENT_KHR => "SHARED_PRESENT_KHR",
            &Self::SHADING_RATE_OPTIMAL_NV => "SHADING_RATE_OPTIMAL_NV",
            &Self::FRAGMENT_DENSITY_MAP_OPTIMAL_EXT => "FRAGMENT_DENSITY_MAP_OPTIMAL_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ImageLayout {
    pub const UNDEFINED: Self = Self(0);
    pub const GENERAL: Self = Self(1);
    pub const COLOR_ATTACHMENT_OPTIMAL: Self = Self(2);
    pub const DEPTH_STENCIL_ATTACHMENT_OPTIMAL: Self = Self(3);
    pub const DEPTH_STENCIL_READ_ONLY_OPTIMAL: Self = Self(4);
    pub const SHADER_READ_ONLY_OPTIMAL: Self = Self(5);
    pub const TRANSFER_SRC_OPTIMAL: Self = Self(6);
    pub const TRANSFER_DST_OPTIMAL: Self = Self(7);
    pub const PREINITIALIZED: Self = Self(8);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl ImageLayout {
    pub const DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL: Self = Self(1000117000);
    pub const DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL: Self = Self(1000117001);
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl ImageLayout {
    pub const DEPTH_ATTACHMENT_OPTIMAL: Self = Self(1000241000);
    pub const DEPTH_READ_ONLY_OPTIMAL: Self = Self(1000241001);
    pub const STENCIL_ATTACHMENT_OPTIMAL: Self = Self(1000241002);
    pub const STENCIL_READ_ONLY_OPTIMAL: Self = Self(1000241003);
}
#[doc = "Provided by [`crate::extensions::khr_swapchain`]"]
impl ImageLayout {
    pub const PRESENT_SRC_KHR: Self = Self(1000001002);
}
#[doc = "Provided by [`crate::extensions::khr_shared_presentable_image`]"]
impl ImageLayout {
    pub const SHARED_PRESENT_KHR: Self = Self(1000111000);
}
#[doc = "Provided by [`crate::extensions::nv_shading_rate_image`]"]
impl ImageLayout {
    pub const SHADING_RATE_OPTIMAL_NV: Self = Self(1000164003);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map`]"]
impl ImageLayout {
    pub const FRAGMENT_DENSITY_MAP_OPTIMAL_EXT: Self = Self(1000218000);
}
#[doc = "Provided by [`crate::extensions::khr_maintenance2`]"]
impl ImageLayout {
    pub const DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR: Self =
        Self::DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL;
    pub const DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR: Self =
        Self::DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL;
}
#[doc = "Provided by [`crate::extensions::khr_fragment_shading_rate`]"]
impl ImageLayout {
    pub const FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR: Self = Self::SHADING_RATE_OPTIMAL_NV;
}
#[doc = "Provided by [`crate::extensions::khr_separate_depth_stencil_layouts`]"]
impl ImageLayout {
    pub const DEPTH_ATTACHMENT_OPTIMAL_KHR: Self = Self::DEPTH_ATTACHMENT_OPTIMAL;
    pub const DEPTH_READ_ONLY_OPTIMAL_KHR: Self = Self::DEPTH_READ_ONLY_OPTIMAL;
    pub const STENCIL_ATTACHMENT_OPTIMAL_KHR: Self = Self::STENCIL_ATTACHMENT_OPTIMAL;
    pub const STENCIL_READ_ONLY_OPTIMAL_KHR: Self = Self::STENCIL_READ_ONLY_OPTIMAL;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageTiling.html) · Enum"]
#[doc(alias = "VkImageTiling")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ImageTiling(pub i32);
impl std::fmt::Debug for ImageTiling {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::OPTIMAL => "OPTIMAL",
            &Self::LINEAR => "LINEAR",
            &Self::DRM_FORMAT_MODIFIER_EXT => "DRM_FORMAT_MODIFIER_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ImageTiling {
    pub const OPTIMAL: Self = Self(0);
    pub const LINEAR: Self = Self(1);
}
#[doc = "Provided by [`crate::extensions::ext_image_drm_format_modifier`]"]
impl ImageTiling {
    pub const DRM_FORMAT_MODIFIER_EXT: Self = Self(1000158000);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageType.html) · Enum"]
#[doc(alias = "VkImageType")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ImageType(pub i32);
impl std::fmt::Debug for ImageType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::_1D => "_1D",
            &Self::_2D => "_2D",
            &Self::_3D => "_3D",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ImageType {
    pub const _1D: Self = Self(0);
    pub const _2D: Self = Self(1);
    pub const _3D: Self = Self(2);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageUsageFlags.html) · Bitmask of [`ImageUsageFlagBits`]"] # [doc (alias = "VkImageUsageFlags")] # [derive (Default)] # [repr (transparent)] pub struct ImageUsageFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const TRANSFER_SRC = ImageUsageFlagBits :: TRANSFER_SRC . 0 ; const TRANSFER_DST = ImageUsageFlagBits :: TRANSFER_DST . 0 ; const SAMPLED = ImageUsageFlagBits :: SAMPLED . 0 ; const STORAGE = ImageUsageFlagBits :: STORAGE . 0 ; const COLOR_ATTACHMENT = ImageUsageFlagBits :: COLOR_ATTACHMENT . 0 ; const DEPTH_STENCIL_ATTACHMENT = ImageUsageFlagBits :: DEPTH_STENCIL_ATTACHMENT . 0 ; const TRANSIENT_ATTACHMENT = ImageUsageFlagBits :: TRANSIENT_ATTACHMENT . 0 ; const INPUT_ATTACHMENT = ImageUsageFlagBits :: INPUT_ATTACHMENT . 0 ; const SHADING_RATE_IMAGE_NV = ImageUsageFlagBits :: SHADING_RATE_IMAGE_NV . 0 ; const FRAGMENT_DENSITY_MAP_EXT = ImageUsageFlagBits :: FRAGMENT_DENSITY_MAP_EXT . 0 ; const FRAGMENT_SHADING_RATE_ATTACHMENT_KHR = ImageUsageFlagBits :: FRAGMENT_SHADING_RATE_ATTACHMENT_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageUsageFlagBits.html) · Bits enum of [`ImageUsageFlags`]"]
#[doc(alias = "VkImageUsageFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ImageUsageFlagBits(pub u32);
impl ImageUsageFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> ImageUsageFlags {
        ImageUsageFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for ImageUsageFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::TRANSFER_SRC => "TRANSFER_SRC",
            &Self::TRANSFER_DST => "TRANSFER_DST",
            &Self::SAMPLED => "SAMPLED",
            &Self::STORAGE => "STORAGE",
            &Self::COLOR_ATTACHMENT => "COLOR_ATTACHMENT",
            &Self::DEPTH_STENCIL_ATTACHMENT => "DEPTH_STENCIL_ATTACHMENT",
            &Self::TRANSIENT_ATTACHMENT => "TRANSIENT_ATTACHMENT",
            &Self::INPUT_ATTACHMENT => "INPUT_ATTACHMENT",
            &Self::SHADING_RATE_IMAGE_NV => "SHADING_RATE_IMAGE_NV",
            &Self::FRAGMENT_DENSITY_MAP_EXT => "FRAGMENT_DENSITY_MAP_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ImageUsageFlagBits {
    pub const TRANSFER_SRC: Self = Self(1);
    pub const TRANSFER_DST: Self = Self(2);
    pub const SAMPLED: Self = Self(4);
    pub const STORAGE: Self = Self(8);
    pub const COLOR_ATTACHMENT: Self = Self(16);
    pub const DEPTH_STENCIL_ATTACHMENT: Self = Self(32);
    pub const TRANSIENT_ATTACHMENT: Self = Self(64);
    pub const INPUT_ATTACHMENT: Self = Self(128);
}
#[doc = "Provided by [`crate::extensions::nv_shading_rate_image`]"]
impl ImageUsageFlagBits {
    pub const SHADING_RATE_IMAGE_NV: Self = Self(256);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map`]"]
impl ImageUsageFlagBits {
    pub const FRAGMENT_DENSITY_MAP_EXT: Self = Self(512);
}
#[doc = "Provided by [`crate::extensions::khr_fragment_shading_rate`]"]
impl ImageUsageFlagBits {
    pub const FRAGMENT_SHADING_RATE_ATTACHMENT_KHR: Self = Self::SHADING_RATE_IMAGE_NV;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageViewCreateFlags.html) · Bitmask of [`ImageViewCreateFlagBits`]"] # [doc (alias = "VkImageViewCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct ImageViewCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const FRAGMENT_DENSITY_MAP_DYNAMIC_EXT = ImageViewCreateFlagBits :: FRAGMENT_DENSITY_MAP_DYNAMIC_EXT . 0 ; const FRAGMENT_DENSITY_MAP_DEFERRED_EXT = ImageViewCreateFlagBits :: FRAGMENT_DENSITY_MAP_DEFERRED_EXT . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageViewCreateFlagBits.html) · Bits enum of [`ImageViewCreateFlags`]"]
#[doc(alias = "VkImageViewCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ImageViewCreateFlagBits(pub u32);
impl ImageViewCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> ImageViewCreateFlags {
        ImageViewCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for ImageViewCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::FRAGMENT_DENSITY_MAP_DYNAMIC_EXT => "FRAGMENT_DENSITY_MAP_DYNAMIC_EXT",
            &Self::FRAGMENT_DENSITY_MAP_DEFERRED_EXT => "FRAGMENT_DENSITY_MAP_DEFERRED_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map`]"]
impl ImageViewCreateFlagBits {
    pub const FRAGMENT_DENSITY_MAP_DYNAMIC_EXT: Self = Self(1);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map2`]"]
impl ImageViewCreateFlagBits {
    pub const FRAGMENT_DENSITY_MAP_DEFERRED_EXT: Self = Self(2);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageViewType.html) · Enum"]
#[doc(alias = "VkImageViewType")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ImageViewType(pub i32);
impl std::fmt::Debug for ImageViewType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::_1D => "_1D",
            &Self::_2D => "_2D",
            &Self::_3D => "_3D",
            &Self::CUBE => "CUBE",
            &Self::_1D_ARRAY => "_1D_ARRAY",
            &Self::_2D_ARRAY => "_2D_ARRAY",
            &Self::CUBE_ARRAY => "CUBE_ARRAY",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ImageViewType {
    pub const _1D: Self = Self(0);
    pub const _2D: Self = Self(1);
    pub const _3D: Self = Self(2);
    pub const CUBE: Self = Self(3);
    pub const _1D_ARRAY: Self = Self(4);
    pub const _2D_ARRAY: Self = Self(5);
    pub const CUBE_ARRAY: Self = Self(6);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSharingMode.html) · Enum"]
#[doc(alias = "VkSharingMode")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SharingMode(pub i32);
impl std::fmt::Debug for SharingMode {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::EXCLUSIVE => "EXCLUSIVE",
            &Self::CONCURRENT => "CONCURRENT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl SharingMode {
    pub const EXCLUSIVE: Self = Self(0);
    pub const CONCURRENT: Self = Self(1);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkIndexType.html) · Enum"]
#[doc(alias = "VkIndexType")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct IndexType(pub i32);
impl std::fmt::Debug for IndexType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::UINT16 => "UINT16",
            &Self::UINT32 => "UINT32",
            &Self::NONE_KHR => "NONE_KHR",
            &Self::UINT8_EXT => "UINT8_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl IndexType {
    pub const UINT16: Self = Self(0);
    pub const UINT32: Self = Self(1);
}
#[doc = "Provided by [`crate::extensions::khr_acceleration_structure`]"]
impl IndexType {
    pub const NONE_KHR: Self = Self(1000165000);
}
#[doc = "Provided by [`crate::extensions::ext_index_type_uint8`]"]
impl IndexType {
    pub const UINT8_EXT: Self = Self(1000265000);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl IndexType {
    pub const NONE_NV: Self = Self::NONE_KHR;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkLogicOp.html) · Enum"]
#[doc(alias = "VkLogicOp")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct LogicOp(pub i32);
impl std::fmt::Debug for LogicOp {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::CLEAR => "CLEAR",
            &Self::AND => "AND",
            &Self::AND_REVERSE => "AND_REVERSE",
            &Self::COPY => "COPY",
            &Self::AND_INVERTED => "AND_INVERTED",
            &Self::NO_OP => "NO_OP",
            &Self::XOR => "XOR",
            &Self::OR => "OR",
            &Self::NOR => "NOR",
            &Self::EQUIVALENT => "EQUIVALENT",
            &Self::INVERT => "INVERT",
            &Self::OR_REVERSE => "OR_REVERSE",
            &Self::COPY_INVERTED => "COPY_INVERTED",
            &Self::OR_INVERTED => "OR_INVERTED",
            &Self::NAND => "NAND",
            &Self::SET => "SET",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl LogicOp {
    pub const CLEAR: Self = Self(0);
    pub const AND: Self = Self(1);
    pub const AND_REVERSE: Self = Self(2);
    pub const COPY: Self = Self(3);
    pub const AND_INVERTED: Self = Self(4);
    pub const NO_OP: Self = Self(5);
    pub const XOR: Self = Self(6);
    pub const OR: Self = Self(7);
    pub const NOR: Self = Self(8);
    pub const EQUIVALENT: Self = Self(9);
    pub const INVERT: Self = Self(10);
    pub const OR_REVERSE: Self = Self(11);
    pub const COPY_INVERTED: Self = Self(12);
    pub const OR_INVERTED: Self = Self(13);
    pub const NAND: Self = Self(14);
    pub const SET: Self = Self(15);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryHeapFlags.html) · Bitmask of [`MemoryHeapFlagBits`]"] # [doc (alias = "VkMemoryHeapFlags")] # [derive (Default)] # [repr (transparent)] pub struct MemoryHeapFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const DEVICE_LOCAL = MemoryHeapFlagBits :: DEVICE_LOCAL . 0 ; const MULTI_INSTANCE = MemoryHeapFlagBits :: MULTI_INSTANCE . 0 ; const MULTI_INSTANCE_KHR = MemoryHeapFlagBits :: MULTI_INSTANCE_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryHeapFlagBits.html) · Bits enum of [`MemoryHeapFlags`]"]
#[doc(alias = "VkMemoryHeapFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct MemoryHeapFlagBits(pub u32);
impl MemoryHeapFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> MemoryHeapFlags {
        MemoryHeapFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for MemoryHeapFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::DEVICE_LOCAL => "DEVICE_LOCAL",
            &Self::MULTI_INSTANCE => "MULTI_INSTANCE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl MemoryHeapFlagBits {
    pub const DEVICE_LOCAL: Self = Self(1);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl MemoryHeapFlagBits {
    pub const MULTI_INSTANCE: Self = Self(2);
}
#[doc = "Provided by [`crate::extensions::khr_device_group_creation`]"]
impl MemoryHeapFlagBits {
    pub const MULTI_INSTANCE_KHR: Self = Self::MULTI_INSTANCE;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAccessFlags.html) · Bitmask of [`AccessFlagBits`]"] # [doc (alias = "VkAccessFlags")] # [derive (Default)] # [repr (transparent)] pub struct AccessFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const INDIRECT_COMMAND_READ = AccessFlagBits :: INDIRECT_COMMAND_READ . 0 ; const INDEX_READ = AccessFlagBits :: INDEX_READ . 0 ; const VERTEX_ATTRIBUTE_READ = AccessFlagBits :: VERTEX_ATTRIBUTE_READ . 0 ; const UNIFORM_READ = AccessFlagBits :: UNIFORM_READ . 0 ; const INPUT_ATTACHMENT_READ = AccessFlagBits :: INPUT_ATTACHMENT_READ . 0 ; const SHADER_READ = AccessFlagBits :: SHADER_READ . 0 ; const SHADER_WRITE = AccessFlagBits :: SHADER_WRITE . 0 ; const COLOR_ATTACHMENT_READ = AccessFlagBits :: COLOR_ATTACHMENT_READ . 0 ; const COLOR_ATTACHMENT_WRITE = AccessFlagBits :: COLOR_ATTACHMENT_WRITE . 0 ; const DEPTH_STENCIL_ATTACHMENT_READ = AccessFlagBits :: DEPTH_STENCIL_ATTACHMENT_READ . 0 ; const DEPTH_STENCIL_ATTACHMENT_WRITE = AccessFlagBits :: DEPTH_STENCIL_ATTACHMENT_WRITE . 0 ; const TRANSFER_READ = AccessFlagBits :: TRANSFER_READ . 0 ; const TRANSFER_WRITE = AccessFlagBits :: TRANSFER_WRITE . 0 ; const HOST_READ = AccessFlagBits :: HOST_READ . 0 ; const HOST_WRITE = AccessFlagBits :: HOST_WRITE . 0 ; const MEMORY_READ = AccessFlagBits :: MEMORY_READ . 0 ; const MEMORY_WRITE = AccessFlagBits :: MEMORY_WRITE . 0 ; const TRANSFORM_FEEDBACK_WRITE_EXT = AccessFlagBits :: TRANSFORM_FEEDBACK_WRITE_EXT . 0 ; const TRANSFORM_FEEDBACK_COUNTER_READ_EXT = AccessFlagBits :: TRANSFORM_FEEDBACK_COUNTER_READ_EXT . 0 ; const TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT = AccessFlagBits :: TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT . 0 ; const CONDITIONAL_RENDERING_READ_EXT = AccessFlagBits :: CONDITIONAL_RENDERING_READ_EXT . 0 ; const COLOR_ATTACHMENT_READ_NONCOHERENT_EXT = AccessFlagBits :: COLOR_ATTACHMENT_READ_NONCOHERENT_EXT . 0 ; const ACCELERATION_STRUCTURE_READ_KHR = AccessFlagBits :: ACCELERATION_STRUCTURE_READ_KHR . 0 ; const ACCELERATION_STRUCTURE_WRITE_KHR = AccessFlagBits :: ACCELERATION_STRUCTURE_WRITE_KHR . 0 ; const SHADING_RATE_IMAGE_READ_NV = AccessFlagBits :: SHADING_RATE_IMAGE_READ_NV . 0 ; const FRAGMENT_DENSITY_MAP_READ_EXT = AccessFlagBits :: FRAGMENT_DENSITY_MAP_READ_EXT . 0 ; const COMMAND_PREPROCESS_READ_NV = AccessFlagBits :: COMMAND_PREPROCESS_READ_NV . 0 ; const COMMAND_PREPROCESS_WRITE_NV = AccessFlagBits :: COMMAND_PREPROCESS_WRITE_NV . 0 ; const ACCELERATION_STRUCTURE_READ_NV = AccessFlagBits :: ACCELERATION_STRUCTURE_READ_NV . 0 ; const ACCELERATION_STRUCTURE_WRITE_NV = AccessFlagBits :: ACCELERATION_STRUCTURE_WRITE_NV . 0 ; const FRAGMENT_SHADING_RATE_ATTACHMENT_READ_KHR = AccessFlagBits :: FRAGMENT_SHADING_RATE_ATTACHMENT_READ_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAccessFlagBits.html) · Bits enum of [`AccessFlags`]"]
#[doc(alias = "VkAccessFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct AccessFlagBits(pub u32);
impl AccessFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> AccessFlags {
        AccessFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for AccessFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::INDIRECT_COMMAND_READ => "INDIRECT_COMMAND_READ",
            &Self::INDEX_READ => "INDEX_READ",
            &Self::VERTEX_ATTRIBUTE_READ => "VERTEX_ATTRIBUTE_READ",
            &Self::UNIFORM_READ => "UNIFORM_READ",
            &Self::INPUT_ATTACHMENT_READ => "INPUT_ATTACHMENT_READ",
            &Self::SHADER_READ => "SHADER_READ",
            &Self::SHADER_WRITE => "SHADER_WRITE",
            &Self::COLOR_ATTACHMENT_READ => "COLOR_ATTACHMENT_READ",
            &Self::COLOR_ATTACHMENT_WRITE => "COLOR_ATTACHMENT_WRITE",
            &Self::DEPTH_STENCIL_ATTACHMENT_READ => "DEPTH_STENCIL_ATTACHMENT_READ",
            &Self::DEPTH_STENCIL_ATTACHMENT_WRITE => "DEPTH_STENCIL_ATTACHMENT_WRITE",
            &Self::TRANSFER_READ => "TRANSFER_READ",
            &Self::TRANSFER_WRITE => "TRANSFER_WRITE",
            &Self::HOST_READ => "HOST_READ",
            &Self::HOST_WRITE => "HOST_WRITE",
            &Self::MEMORY_READ => "MEMORY_READ",
            &Self::MEMORY_WRITE => "MEMORY_WRITE",
            &Self::TRANSFORM_FEEDBACK_WRITE_EXT => "TRANSFORM_FEEDBACK_WRITE_EXT",
            &Self::TRANSFORM_FEEDBACK_COUNTER_READ_EXT => "TRANSFORM_FEEDBACK_COUNTER_READ_EXT",
            &Self::TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT => "TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT",
            &Self::CONDITIONAL_RENDERING_READ_EXT => "CONDITIONAL_RENDERING_READ_EXT",
            &Self::COLOR_ATTACHMENT_READ_NONCOHERENT_EXT => "COLOR_ATTACHMENT_READ_NONCOHERENT_EXT",
            &Self::ACCELERATION_STRUCTURE_READ_KHR => "ACCELERATION_STRUCTURE_READ_KHR",
            &Self::ACCELERATION_STRUCTURE_WRITE_KHR => "ACCELERATION_STRUCTURE_WRITE_KHR",
            &Self::SHADING_RATE_IMAGE_READ_NV => "SHADING_RATE_IMAGE_READ_NV",
            &Self::FRAGMENT_DENSITY_MAP_READ_EXT => "FRAGMENT_DENSITY_MAP_READ_EXT",
            &Self::COMMAND_PREPROCESS_READ_NV => "COMMAND_PREPROCESS_READ_NV",
            &Self::COMMAND_PREPROCESS_WRITE_NV => "COMMAND_PREPROCESS_WRITE_NV",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl AccessFlagBits {
    pub const INDIRECT_COMMAND_READ: Self = Self(1);
    pub const INDEX_READ: Self = Self(2);
    pub const VERTEX_ATTRIBUTE_READ: Self = Self(4);
    pub const UNIFORM_READ: Self = Self(8);
    pub const INPUT_ATTACHMENT_READ: Self = Self(16);
    pub const SHADER_READ: Self = Self(32);
    pub const SHADER_WRITE: Self = Self(64);
    pub const COLOR_ATTACHMENT_READ: Self = Self(128);
    pub const COLOR_ATTACHMENT_WRITE: Self = Self(256);
    pub const DEPTH_STENCIL_ATTACHMENT_READ: Self = Self(512);
    pub const DEPTH_STENCIL_ATTACHMENT_WRITE: Self = Self(1024);
    pub const TRANSFER_READ: Self = Self(2048);
    pub const TRANSFER_WRITE: Self = Self(4096);
    pub const HOST_READ: Self = Self(8192);
    pub const HOST_WRITE: Self = Self(16384);
    pub const MEMORY_READ: Self = Self(32768);
    pub const MEMORY_WRITE: Self = Self(65536);
}
#[doc = "Provided by [`crate::extensions::ext_transform_feedback`]"]
impl AccessFlagBits {
    pub const TRANSFORM_FEEDBACK_WRITE_EXT: Self = Self(33554432);
    pub const TRANSFORM_FEEDBACK_COUNTER_READ_EXT: Self = Self(67108864);
    pub const TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT: Self = Self(134217728);
}
#[doc = "Provided by [`crate::extensions::ext_conditional_rendering`]"]
impl AccessFlagBits {
    pub const CONDITIONAL_RENDERING_READ_EXT: Self = Self(1048576);
}
#[doc = "Provided by [`crate::extensions::ext_blend_operation_advanced`]"]
impl AccessFlagBits {
    pub const COLOR_ATTACHMENT_READ_NONCOHERENT_EXT: Self = Self(524288);
}
#[doc = "Provided by [`crate::extensions::khr_acceleration_structure`]"]
impl AccessFlagBits {
    pub const ACCELERATION_STRUCTURE_READ_KHR: Self = Self(2097152);
    pub const ACCELERATION_STRUCTURE_WRITE_KHR: Self = Self(4194304);
}
#[doc = "Provided by [`crate::extensions::nv_shading_rate_image`]"]
impl AccessFlagBits {
    pub const SHADING_RATE_IMAGE_READ_NV: Self = Self(8388608);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map`]"]
impl AccessFlagBits {
    pub const FRAGMENT_DENSITY_MAP_READ_EXT: Self = Self(16777216);
}
#[doc = "Provided by [`crate::extensions::nv_device_generated_commands`]"]
impl AccessFlagBits {
    pub const COMMAND_PREPROCESS_READ_NV: Self = Self(131072);
    pub const COMMAND_PREPROCESS_WRITE_NV: Self = Self(262144);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl AccessFlagBits {
    pub const ACCELERATION_STRUCTURE_READ_NV: Self = Self::ACCELERATION_STRUCTURE_READ_KHR;
    pub const ACCELERATION_STRUCTURE_WRITE_NV: Self = Self::ACCELERATION_STRUCTURE_WRITE_KHR;
}
#[doc = "Provided by [`crate::extensions::khr_fragment_shading_rate`]"]
impl AccessFlagBits {
    pub const FRAGMENT_SHADING_RATE_ATTACHMENT_READ_KHR: Self = Self::SHADING_RATE_IMAGE_READ_NV;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryPropertyFlags.html) · Bitmask of [`MemoryPropertyFlagBits`]"] # [doc (alias = "VkMemoryPropertyFlags")] # [derive (Default)] # [repr (transparent)] pub struct MemoryPropertyFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const DEVICE_LOCAL = MemoryPropertyFlagBits :: DEVICE_LOCAL . 0 ; const HOST_VISIBLE = MemoryPropertyFlagBits :: HOST_VISIBLE . 0 ; const HOST_COHERENT = MemoryPropertyFlagBits :: HOST_COHERENT . 0 ; const HOST_CACHED = MemoryPropertyFlagBits :: HOST_CACHED . 0 ; const LAZILY_ALLOCATED = MemoryPropertyFlagBits :: LAZILY_ALLOCATED . 0 ; const PROTECTED = MemoryPropertyFlagBits :: PROTECTED . 0 ; const DEVICE_COHERENT_AMD = MemoryPropertyFlagBits :: DEVICE_COHERENT_AMD . 0 ; const DEVICE_UNCACHED_AMD = MemoryPropertyFlagBits :: DEVICE_UNCACHED_AMD . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryPropertyFlagBits.html) · Bits enum of [`MemoryPropertyFlags`]"]
#[doc(alias = "VkMemoryPropertyFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct MemoryPropertyFlagBits(pub u32);
impl MemoryPropertyFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> MemoryPropertyFlags {
        MemoryPropertyFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for MemoryPropertyFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::DEVICE_LOCAL => "DEVICE_LOCAL",
            &Self::HOST_VISIBLE => "HOST_VISIBLE",
            &Self::HOST_COHERENT => "HOST_COHERENT",
            &Self::HOST_CACHED => "HOST_CACHED",
            &Self::LAZILY_ALLOCATED => "LAZILY_ALLOCATED",
            &Self::PROTECTED => "PROTECTED",
            &Self::DEVICE_COHERENT_AMD => "DEVICE_COHERENT_AMD",
            &Self::DEVICE_UNCACHED_AMD => "DEVICE_UNCACHED_AMD",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl MemoryPropertyFlagBits {
    pub const DEVICE_LOCAL: Self = Self(1);
    pub const HOST_VISIBLE: Self = Self(2);
    pub const HOST_COHERENT: Self = Self(4);
    pub const HOST_CACHED: Self = Self(8);
    pub const LAZILY_ALLOCATED: Self = Self(16);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl MemoryPropertyFlagBits {
    pub const PROTECTED: Self = Self(32);
}
#[doc = "Provided by [`crate::extensions::amd_device_coherent_memory`]"]
impl MemoryPropertyFlagBits {
    pub const DEVICE_COHERENT_AMD: Self = Self(64);
    pub const DEVICE_UNCACHED_AMD: Self = Self(128);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceType.html) · Enum"]
#[doc(alias = "VkPhysicalDeviceType")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PhysicalDeviceType(pub i32);
impl std::fmt::Debug for PhysicalDeviceType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::OTHER => "OTHER",
            &Self::INTEGRATED_GPU => "INTEGRATED_GPU",
            &Self::DISCRETE_GPU => "DISCRETE_GPU",
            &Self::VIRTUAL_GPU => "VIRTUAL_GPU",
            &Self::CPU => "CPU",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl PhysicalDeviceType {
    pub const OTHER: Self = Self(0);
    pub const INTEGRATED_GPU: Self = Self(1);
    pub const DISCRETE_GPU: Self = Self(2);
    pub const VIRTUAL_GPU: Self = Self(3);
    pub const CPU: Self = Self(4);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineBindPoint.html) · Enum"]
#[doc(alias = "VkPipelineBindPoint")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineBindPoint(pub i32);
impl std::fmt::Debug for PipelineBindPoint {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::GRAPHICS => "GRAPHICS",
            &Self::COMPUTE => "COMPUTE",
            &Self::RAY_TRACING_KHR => "RAY_TRACING_KHR",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl PipelineBindPoint {
    pub const GRAPHICS: Self = Self(0);
    pub const COMPUTE: Self = Self(1);
}
#[doc = "Provided by [`crate::extensions::khr_ray_tracing_pipeline`]"]
impl PipelineBindPoint {
    pub const RAY_TRACING_KHR: Self = Self(1000165000);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl PipelineBindPoint {
    pub const RAY_TRACING_NV: Self = Self::RAY_TRACING_KHR;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineCreateFlags.html) · Bitmask of [`PipelineCreateFlagBits`]"] # [doc (alias = "VkPipelineCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const DISABLE_OPTIMIZATION = PipelineCreateFlagBits :: DISABLE_OPTIMIZATION . 0 ; const ALLOW_DERIVATIVES = PipelineCreateFlagBits :: ALLOW_DERIVATIVES . 0 ; const DERIVATIVE = PipelineCreateFlagBits :: DERIVATIVE . 0 ; const VIEW_INDEX_FROM_DEVICE_INDEX = PipelineCreateFlagBits :: VIEW_INDEX_FROM_DEVICE_INDEX . 0 ; const DISPATCH_BASE = PipelineCreateFlagBits :: DISPATCH_BASE . 0 ; const RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_KHR = PipelineCreateFlagBits :: RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_KHR . 0 ; const RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_KHR = PipelineCreateFlagBits :: RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_KHR . 0 ; const RAY_TRACING_NO_NULL_MISS_SHADERS_KHR = PipelineCreateFlagBits :: RAY_TRACING_NO_NULL_MISS_SHADERS_KHR . 0 ; const RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_KHR = PipelineCreateFlagBits :: RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_KHR . 0 ; const RAY_TRACING_SKIP_TRIANGLES_KHR = PipelineCreateFlagBits :: RAY_TRACING_SKIP_TRIANGLES_KHR . 0 ; const RAY_TRACING_SKIP_AABBS_KHR = PipelineCreateFlagBits :: RAY_TRACING_SKIP_AABBS_KHR . 0 ; const RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_KHR = PipelineCreateFlagBits :: RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_KHR . 0 ; const DEFER_COMPILE_NV = PipelineCreateFlagBits :: DEFER_COMPILE_NV . 0 ; const CAPTURE_STATISTICS_KHR = PipelineCreateFlagBits :: CAPTURE_STATISTICS_KHR . 0 ; const CAPTURE_INTERNAL_REPRESENTATIONS_KHR = PipelineCreateFlagBits :: CAPTURE_INTERNAL_REPRESENTATIONS_KHR . 0 ; const INDIRECT_BINDABLE_NV = PipelineCreateFlagBits :: INDIRECT_BINDABLE_NV . 0 ; const LIBRARY_KHR = PipelineCreateFlagBits :: LIBRARY_KHR . 0 ; const FAIL_ON_PIPELINE_COMPILE_REQUIRED_EXT = PipelineCreateFlagBits :: FAIL_ON_PIPELINE_COMPILE_REQUIRED_EXT . 0 ; const EARLY_RETURN_ON_FAILURE_EXT = PipelineCreateFlagBits :: EARLY_RETURN_ON_FAILURE_EXT . 0 ; const VIEW_INDEX_FROM_DEVICE_INDEX_KHR = PipelineCreateFlagBits :: VIEW_INDEX_FROM_DEVICE_INDEX_KHR . 0 ; const DISPATCH_BASE_KHR = PipelineCreateFlagBits :: DISPATCH_BASE_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineCreateFlagBits.html) · Bits enum of [`PipelineCreateFlags`]"]
#[doc(alias = "VkPipelineCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineCreateFlagBits(pub u32);
impl PipelineCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineCreateFlags {
        PipelineCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::DISABLE_OPTIMIZATION => "DISABLE_OPTIMIZATION",
            &Self::ALLOW_DERIVATIVES => "ALLOW_DERIVATIVES",
            &Self::DERIVATIVE => "DERIVATIVE",
            &Self::VIEW_INDEX_FROM_DEVICE_INDEX => "VIEW_INDEX_FROM_DEVICE_INDEX",
            &Self::DISPATCH_BASE => "DISPATCH_BASE",
            &Self::RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_KHR => {
                "RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_KHR"
            }
            &Self::RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_KHR => {
                "RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_KHR"
            }
            &Self::RAY_TRACING_NO_NULL_MISS_SHADERS_KHR => "RAY_TRACING_NO_NULL_MISS_SHADERS_KHR",
            &Self::RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_KHR => {
                "RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_KHR"
            }
            &Self::RAY_TRACING_SKIP_TRIANGLES_KHR => "RAY_TRACING_SKIP_TRIANGLES_KHR",
            &Self::RAY_TRACING_SKIP_AABBS_KHR => "RAY_TRACING_SKIP_AABBS_KHR",
            &Self::RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_KHR => {
                "RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_KHR"
            }
            &Self::DEFER_COMPILE_NV => "DEFER_COMPILE_NV",
            &Self::CAPTURE_STATISTICS_KHR => "CAPTURE_STATISTICS_KHR",
            &Self::CAPTURE_INTERNAL_REPRESENTATIONS_KHR => "CAPTURE_INTERNAL_REPRESENTATIONS_KHR",
            &Self::INDIRECT_BINDABLE_NV => "INDIRECT_BINDABLE_NV",
            &Self::LIBRARY_KHR => "LIBRARY_KHR",
            &Self::FAIL_ON_PIPELINE_COMPILE_REQUIRED_EXT => "FAIL_ON_PIPELINE_COMPILE_REQUIRED_EXT",
            &Self::EARLY_RETURN_ON_FAILURE_EXT => "EARLY_RETURN_ON_FAILURE_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl PipelineCreateFlagBits {
    pub const DISABLE_OPTIMIZATION: Self = Self(1);
    pub const ALLOW_DERIVATIVES: Self = Self(2);
    pub const DERIVATIVE: Self = Self(4);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl PipelineCreateFlagBits {
    pub const VIEW_INDEX_FROM_DEVICE_INDEX: Self = Self(8);
    pub const DISPATCH_BASE: Self = Self(16);
}
#[doc = "Provided by [`crate::extensions::khr_ray_tracing_pipeline`]"]
impl PipelineCreateFlagBits {
    pub const RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_KHR: Self = Self(16384);
    pub const RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_KHR: Self = Self(32768);
    pub const RAY_TRACING_NO_NULL_MISS_SHADERS_KHR: Self = Self(65536);
    pub const RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_KHR: Self = Self(131072);
    pub const RAY_TRACING_SKIP_TRIANGLES_KHR: Self = Self(4096);
    pub const RAY_TRACING_SKIP_AABBS_KHR: Self = Self(8192);
    pub const RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_KHR: Self = Self(524288);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl PipelineCreateFlagBits {
    pub const DEFER_COMPILE_NV: Self = Self(32);
}
#[doc = "Provided by [`crate::extensions::khr_pipeline_executable_properties`]"]
impl PipelineCreateFlagBits {
    pub const CAPTURE_STATISTICS_KHR: Self = Self(64);
    pub const CAPTURE_INTERNAL_REPRESENTATIONS_KHR: Self = Self(128);
}
#[doc = "Provided by [`crate::extensions::nv_device_generated_commands`]"]
impl PipelineCreateFlagBits {
    pub const INDIRECT_BINDABLE_NV: Self = Self(262144);
}
#[doc = "Provided by [`crate::extensions::khr_pipeline_library`]"]
impl PipelineCreateFlagBits {
    pub const LIBRARY_KHR: Self = Self(2048);
}
#[doc = "Provided by [`crate::extensions::ext_pipeline_creation_cache_control`]"]
impl PipelineCreateFlagBits {
    pub const FAIL_ON_PIPELINE_COMPILE_REQUIRED_EXT: Self = Self(256);
    pub const EARLY_RETURN_ON_FAILURE_EXT: Self = Self(512);
}
#[doc = "Provided by [`crate::extensions::khr_device_group`]"]
impl PipelineCreateFlagBits {
    pub const VIEW_INDEX_FROM_DEVICE_INDEX_KHR: Self = Self::VIEW_INDEX_FROM_DEVICE_INDEX;
    pub const DISPATCH_BASE_KHR: Self = Self::DISPATCH_BASE;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPrimitiveTopology.html) · Enum"]
#[doc(alias = "VkPrimitiveTopology")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PrimitiveTopology(pub i32);
impl std::fmt::Debug for PrimitiveTopology {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::POINT_LIST => "POINT_LIST",
            &Self::LINE_LIST => "LINE_LIST",
            &Self::LINE_STRIP => "LINE_STRIP",
            &Self::TRIANGLE_LIST => "TRIANGLE_LIST",
            &Self::TRIANGLE_STRIP => "TRIANGLE_STRIP",
            &Self::TRIANGLE_FAN => "TRIANGLE_FAN",
            &Self::LINE_LIST_WITH_ADJACENCY => "LINE_LIST_WITH_ADJACENCY",
            &Self::LINE_STRIP_WITH_ADJACENCY => "LINE_STRIP_WITH_ADJACENCY",
            &Self::TRIANGLE_LIST_WITH_ADJACENCY => "TRIANGLE_LIST_WITH_ADJACENCY",
            &Self::TRIANGLE_STRIP_WITH_ADJACENCY => "TRIANGLE_STRIP_WITH_ADJACENCY",
            &Self::PATCH_LIST => "PATCH_LIST",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl PrimitiveTopology {
    pub const POINT_LIST: Self = Self(0);
    pub const LINE_LIST: Self = Self(1);
    pub const LINE_STRIP: Self = Self(2);
    pub const TRIANGLE_LIST: Self = Self(3);
    pub const TRIANGLE_STRIP: Self = Self(4);
    pub const TRIANGLE_FAN: Self = Self(5);
    pub const LINE_LIST_WITH_ADJACENCY: Self = Self(6);
    pub const LINE_STRIP_WITH_ADJACENCY: Self = Self(7);
    pub const TRIANGLE_LIST_WITH_ADJACENCY: Self = Self(8);
    pub const TRIANGLE_STRIP_WITH_ADJACENCY: Self = Self(9);
    pub const PATCH_LIST: Self = Self(10);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryControlFlags.html) · Bitmask of [`QueryControlFlagBits`]"] # [doc (alias = "VkQueryControlFlags")] # [derive (Default)] # [repr (transparent)] pub struct QueryControlFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const PRECISE = QueryControlFlagBits :: PRECISE . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryControlFlagBits.html) · Bits enum of [`QueryControlFlags`]"]
#[doc(alias = "VkQueryControlFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct QueryControlFlagBits(pub u32);
impl QueryControlFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> QueryControlFlags {
        QueryControlFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for QueryControlFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::PRECISE => "PRECISE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl QueryControlFlagBits {
    pub const PRECISE: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryPipelineStatisticFlags.html) · Bitmask of [`QueryPipelineStatisticFlagBits`]"] # [doc (alias = "VkQueryPipelineStatisticFlags")] # [derive (Default)] # [repr (transparent)] pub struct QueryPipelineStatisticFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const INPUT_ASSEMBLY_VERTICES = QueryPipelineStatisticFlagBits :: INPUT_ASSEMBLY_VERTICES . 0 ; const INPUT_ASSEMBLY_PRIMITIVES = QueryPipelineStatisticFlagBits :: INPUT_ASSEMBLY_PRIMITIVES . 0 ; const VERTEX_SHADER_INVOCATIONS = QueryPipelineStatisticFlagBits :: VERTEX_SHADER_INVOCATIONS . 0 ; const GEOMETRY_SHADER_INVOCATIONS = QueryPipelineStatisticFlagBits :: GEOMETRY_SHADER_INVOCATIONS . 0 ; const GEOMETRY_SHADER_PRIMITIVES = QueryPipelineStatisticFlagBits :: GEOMETRY_SHADER_PRIMITIVES . 0 ; const CLIPPING_INVOCATIONS = QueryPipelineStatisticFlagBits :: CLIPPING_INVOCATIONS . 0 ; const CLIPPING_PRIMITIVES = QueryPipelineStatisticFlagBits :: CLIPPING_PRIMITIVES . 0 ; const FRAGMENT_SHADER_INVOCATIONS = QueryPipelineStatisticFlagBits :: FRAGMENT_SHADER_INVOCATIONS . 0 ; const TESSELLATION_CONTROL_SHADER_PATCHES = QueryPipelineStatisticFlagBits :: TESSELLATION_CONTROL_SHADER_PATCHES . 0 ; const TESSELLATION_EVALUATION_SHADER_INVOCATIONS = QueryPipelineStatisticFlagBits :: TESSELLATION_EVALUATION_SHADER_INVOCATIONS . 0 ; const COMPUTE_SHADER_INVOCATIONS = QueryPipelineStatisticFlagBits :: COMPUTE_SHADER_INVOCATIONS . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryPipelineStatisticFlagBits.html) · Bits enum of [`QueryPipelineStatisticFlags`]"]
#[doc(alias = "VkQueryPipelineStatisticFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct QueryPipelineStatisticFlagBits(pub u32);
impl QueryPipelineStatisticFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> QueryPipelineStatisticFlags {
        QueryPipelineStatisticFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for QueryPipelineStatisticFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::INPUT_ASSEMBLY_VERTICES => "INPUT_ASSEMBLY_VERTICES",
            &Self::INPUT_ASSEMBLY_PRIMITIVES => "INPUT_ASSEMBLY_PRIMITIVES",
            &Self::VERTEX_SHADER_INVOCATIONS => "VERTEX_SHADER_INVOCATIONS",
            &Self::GEOMETRY_SHADER_INVOCATIONS => "GEOMETRY_SHADER_INVOCATIONS",
            &Self::GEOMETRY_SHADER_PRIMITIVES => "GEOMETRY_SHADER_PRIMITIVES",
            &Self::CLIPPING_INVOCATIONS => "CLIPPING_INVOCATIONS",
            &Self::CLIPPING_PRIMITIVES => "CLIPPING_PRIMITIVES",
            &Self::FRAGMENT_SHADER_INVOCATIONS => "FRAGMENT_SHADER_INVOCATIONS",
            &Self::TESSELLATION_CONTROL_SHADER_PATCHES => "TESSELLATION_CONTROL_SHADER_PATCHES",
            &Self::TESSELLATION_EVALUATION_SHADER_INVOCATIONS => {
                "TESSELLATION_EVALUATION_SHADER_INVOCATIONS"
            }
            &Self::COMPUTE_SHADER_INVOCATIONS => "COMPUTE_SHADER_INVOCATIONS",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl QueryPipelineStatisticFlagBits {
    pub const INPUT_ASSEMBLY_VERTICES: Self = Self(1);
    pub const INPUT_ASSEMBLY_PRIMITIVES: Self = Self(2);
    pub const VERTEX_SHADER_INVOCATIONS: Self = Self(4);
    pub const GEOMETRY_SHADER_INVOCATIONS: Self = Self(8);
    pub const GEOMETRY_SHADER_PRIMITIVES: Self = Self(16);
    pub const CLIPPING_INVOCATIONS: Self = Self(32);
    pub const CLIPPING_PRIMITIVES: Self = Self(64);
    pub const FRAGMENT_SHADER_INVOCATIONS: Self = Self(128);
    pub const TESSELLATION_CONTROL_SHADER_PATCHES: Self = Self(256);
    pub const TESSELLATION_EVALUATION_SHADER_INVOCATIONS: Self = Self(512);
    pub const COMPUTE_SHADER_INVOCATIONS: Self = Self(1024);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryResultFlags.html) · Bitmask of [`QueryResultFlagBits`]"] # [doc (alias = "VkQueryResultFlags")] # [derive (Default)] # [repr (transparent)] pub struct QueryResultFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const _64 = QueryResultFlagBits :: _64 . 0 ; const WAIT = QueryResultFlagBits :: WAIT . 0 ; const WITH_AVAILABILITY = QueryResultFlagBits :: WITH_AVAILABILITY . 0 ; const PARTIAL = QueryResultFlagBits :: PARTIAL . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryResultFlagBits.html) · Bits enum of [`QueryResultFlags`]"]
#[doc(alias = "VkQueryResultFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct QueryResultFlagBits(pub u32);
impl QueryResultFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> QueryResultFlags {
        QueryResultFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for QueryResultFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::_64 => "_64",
            &Self::WAIT => "WAIT",
            &Self::WITH_AVAILABILITY => "WITH_AVAILABILITY",
            &Self::PARTIAL => "PARTIAL",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl QueryResultFlagBits {
    pub const _64: Self = Self(1);
    pub const WAIT: Self = Self(2);
    pub const WITH_AVAILABILITY: Self = Self(4);
    pub const PARTIAL: Self = Self(8);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryType.html) · Enum"]
#[doc(alias = "VkQueryType")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct QueryType(pub i32);
impl std::fmt::Debug for QueryType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::OCCLUSION => "OCCLUSION",
            &Self::PIPELINE_STATISTICS => "PIPELINE_STATISTICS",
            &Self::TIMESTAMP => "TIMESTAMP",
            &Self::TRANSFORM_FEEDBACK_STREAM_EXT => "TRANSFORM_FEEDBACK_STREAM_EXT",
            &Self::PERFORMANCE_QUERY_KHR => "PERFORMANCE_QUERY_KHR",
            &Self::ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR => {
                "ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR => {
                "ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV => {
                "ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV"
            }
            &Self::PERFORMANCE_QUERY_INTEL => "PERFORMANCE_QUERY_INTEL",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl QueryType {
    pub const OCCLUSION: Self = Self(0);
    pub const PIPELINE_STATISTICS: Self = Self(1);
    pub const TIMESTAMP: Self = Self(2);
}
#[doc = "Provided by [`crate::extensions::ext_transform_feedback`]"]
impl QueryType {
    pub const TRANSFORM_FEEDBACK_STREAM_EXT: Self = Self(1000028004);
}
#[doc = "Provided by [`crate::extensions::khr_performance_query`]"]
impl QueryType {
    pub const PERFORMANCE_QUERY_KHR: Self = Self(1000116000);
}
#[doc = "Provided by [`crate::extensions::khr_acceleration_structure`]"]
impl QueryType {
    pub const ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR: Self = Self(1000150000);
    pub const ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR: Self = Self(1000150001);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl QueryType {
    pub const ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV: Self = Self(1000165000);
}
#[doc = "Provided by [`crate::extensions::intel_performance_query`]"]
impl QueryType {
    pub const PERFORMANCE_QUERY_INTEL: Self = Self(1000210000);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueueFlags.html) · Bitmask of [`QueueFlagBits`]"] # [doc (alias = "VkQueueFlags")] # [derive (Default)] # [repr (transparent)] pub struct QueueFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const GRAPHICS = QueueFlagBits :: GRAPHICS . 0 ; const COMPUTE = QueueFlagBits :: COMPUTE . 0 ; const TRANSFER = QueueFlagBits :: TRANSFER . 0 ; const SPARSE_BINDING = QueueFlagBits :: SPARSE_BINDING . 0 ; const PROTECTED = QueueFlagBits :: PROTECTED . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueueFlagBits.html) · Bits enum of [`QueueFlags`]"]
#[doc(alias = "VkQueueFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct QueueFlagBits(pub u32);
impl QueueFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> QueueFlags {
        QueueFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for QueueFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::GRAPHICS => "GRAPHICS",
            &Self::COMPUTE => "COMPUTE",
            &Self::TRANSFER => "TRANSFER",
            &Self::SPARSE_BINDING => "SPARSE_BINDING",
            &Self::PROTECTED => "PROTECTED",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl QueueFlagBits {
    pub const GRAPHICS: Self = Self(1);
    pub const COMPUTE: Self = Self(2);
    pub const TRANSFER: Self = Self(4);
    pub const SPARSE_BINDING: Self = Self(8);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl QueueFlagBits {
    pub const PROTECTED: Self = Self(16);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubpassContents.html) · Enum"]
#[doc(alias = "VkSubpassContents")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SubpassContents(pub i32);
impl std::fmt::Debug for SubpassContents {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::INLINE => "INLINE",
            &Self::SECONDARY_COMMAND_BUFFERS => "SECONDARY_COMMAND_BUFFERS",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl SubpassContents {
    pub const INLINE: Self = Self(0);
    pub const SECONDARY_COMMAND_BUFFERS: Self = Self(1);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkResult.html) · Enum"]
#[doc(alias = "VkResult")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct Result(pub i32);
impl std::fmt::Debug for Result {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::SUCCESS => "SUCCESS",
            &Self::NOT_READY => "NOT_READY",
            &Self::TIMEOUT => "TIMEOUT",
            &Self::EVENT_SET => "EVENT_SET",
            &Self::EVENT_RESET => "EVENT_RESET",
            &Self::INCOMPLETE => "INCOMPLETE",
            &Self::ERROR_OUT_OF_HOST_MEMORY => "ERROR_OUT_OF_HOST_MEMORY",
            &Self::ERROR_OUT_OF_DEVICE_MEMORY => "ERROR_OUT_OF_DEVICE_MEMORY",
            &Self::ERROR_INITIALIZATION_FAILED => "ERROR_INITIALIZATION_FAILED",
            &Self::ERROR_DEVICE_LOST => "ERROR_DEVICE_LOST",
            &Self::ERROR_MEMORY_MAP_FAILED => "ERROR_MEMORY_MAP_FAILED",
            &Self::ERROR_LAYER_NOT_PRESENT => "ERROR_LAYER_NOT_PRESENT",
            &Self::ERROR_EXTENSION_NOT_PRESENT => "ERROR_EXTENSION_NOT_PRESENT",
            &Self::ERROR_FEATURE_NOT_PRESENT => "ERROR_FEATURE_NOT_PRESENT",
            &Self::ERROR_INCOMPATIBLE_DRIVER => "ERROR_INCOMPATIBLE_DRIVER",
            &Self::ERROR_TOO_MANY_OBJECTS => "ERROR_TOO_MANY_OBJECTS",
            &Self::ERROR_FORMAT_NOT_SUPPORTED => "ERROR_FORMAT_NOT_SUPPORTED",
            &Self::ERROR_FRAGMENTED_POOL => "ERROR_FRAGMENTED_POOL",
            &Self::ERROR_UNKNOWN => "ERROR_UNKNOWN",
            &Self::ERROR_OUT_OF_POOL_MEMORY => "ERROR_OUT_OF_POOL_MEMORY",
            &Self::ERROR_INVALID_EXTERNAL_HANDLE => "ERROR_INVALID_EXTERNAL_HANDLE",
            &Self::ERROR_FRAGMENTATION => "ERROR_FRAGMENTATION",
            &Self::ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS => "ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS",
            &Self::ERROR_SURFACE_LOST_KHR => "ERROR_SURFACE_LOST_KHR",
            &Self::ERROR_NATIVE_WINDOW_IN_USE_KHR => "ERROR_NATIVE_WINDOW_IN_USE_KHR",
            &Self::SUBOPTIMAL_KHR => "SUBOPTIMAL_KHR",
            &Self::ERROR_OUT_OF_DATE_KHR => "ERROR_OUT_OF_DATE_KHR",
            &Self::ERROR_INCOMPATIBLE_DISPLAY_KHR => "ERROR_INCOMPATIBLE_DISPLAY_KHR",
            &Self::ERROR_VALIDATION_FAILED_EXT => "ERROR_VALIDATION_FAILED_EXT",
            &Self::ERROR_INVALID_SHADER_NV => "ERROR_INVALID_SHADER_NV",
            &Self::ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT => {
                "ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"
            }
            &Self::ERROR_NOT_PERMITTED_EXT => "ERROR_NOT_PERMITTED_EXT",
            &Self::ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT => {
                "ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT"
            }
            &Self::THREAD_IDLE_KHR => "THREAD_IDLE_KHR",
            &Self::THREAD_DONE_KHR => "THREAD_DONE_KHR",
            &Self::OPERATION_DEFERRED_KHR => "OPERATION_DEFERRED_KHR",
            &Self::OPERATION_NOT_DEFERRED_KHR => "OPERATION_NOT_DEFERRED_KHR",
            &Self::PIPELINE_COMPILE_REQUIRED_EXT => "PIPELINE_COMPILE_REQUIRED_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl Result {
    pub const SUCCESS: Self = Self(0);
    pub const NOT_READY: Self = Self(1);
    pub const TIMEOUT: Self = Self(2);
    pub const EVENT_SET: Self = Self(3);
    pub const EVENT_RESET: Self = Self(4);
    pub const INCOMPLETE: Self = Self(5);
    pub const ERROR_OUT_OF_HOST_MEMORY: Self = Self(-1);
    pub const ERROR_OUT_OF_DEVICE_MEMORY: Self = Self(-2);
    pub const ERROR_INITIALIZATION_FAILED: Self = Self(-3);
    pub const ERROR_DEVICE_LOST: Self = Self(-4);
    pub const ERROR_MEMORY_MAP_FAILED: Self = Self(-5);
    pub const ERROR_LAYER_NOT_PRESENT: Self = Self(-6);
    pub const ERROR_EXTENSION_NOT_PRESENT: Self = Self(-7);
    pub const ERROR_FEATURE_NOT_PRESENT: Self = Self(-8);
    pub const ERROR_INCOMPATIBLE_DRIVER: Self = Self(-9);
    pub const ERROR_TOO_MANY_OBJECTS: Self = Self(-10);
    pub const ERROR_FORMAT_NOT_SUPPORTED: Self = Self(-11);
    pub const ERROR_FRAGMENTED_POOL: Self = Self(-12);
    pub const ERROR_UNKNOWN: Self = Self(-13);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl Result {
    pub const ERROR_OUT_OF_POOL_MEMORY: Self = Self(-1000069000);
    pub const ERROR_INVALID_EXTERNAL_HANDLE: Self = Self(-1000072003);
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl Result {
    pub const ERROR_FRAGMENTATION: Self = Self(-1000161000);
    pub const ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS: Self = Self(-1000257000);
}
#[doc = "Provided by [`crate::extensions::khr_surface`]"]
impl Result {
    pub const ERROR_SURFACE_LOST_KHR: Self = Self(-1000000000);
    pub const ERROR_NATIVE_WINDOW_IN_USE_KHR: Self = Self(-1000000001);
}
#[doc = "Provided by [`crate::extensions::khr_swapchain`]"]
impl Result {
    pub const SUBOPTIMAL_KHR: Self = Self(1000001003);
    pub const ERROR_OUT_OF_DATE_KHR: Self = Self(-1000001004);
}
#[doc = "Provided by [`crate::extensions::khr_display_swapchain`]"]
impl Result {
    pub const ERROR_INCOMPATIBLE_DISPLAY_KHR: Self = Self(-1000003001);
}
#[doc = "Provided by [`crate::extensions::ext_debug_report`]"]
impl Result {
    pub const ERROR_VALIDATION_FAILED_EXT: Self = Self(-1000011001);
}
#[doc = "Provided by [`crate::extensions::nv_glsl_shader`]"]
impl Result {
    pub const ERROR_INVALID_SHADER_NV: Self = Self(-1000012000);
}
#[doc = "Provided by [`crate::extensions::ext_image_drm_format_modifier`]"]
impl Result {
    pub const ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT: Self = Self(-1000158000);
}
#[doc = "Provided by [`crate::extensions::ext_global_priority`]"]
impl Result {
    pub const ERROR_NOT_PERMITTED_EXT: Self = Self(-1000174001);
}
#[doc = "Provided by [`crate::extensions::ext_full_screen_exclusive`]"]
impl Result {
    pub const ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT: Self = Self(-1000255000);
}
#[doc = "Provided by [`crate::extensions::khr_deferred_host_operations`]"]
impl Result {
    pub const THREAD_IDLE_KHR: Self = Self(1000268000);
    pub const THREAD_DONE_KHR: Self = Self(1000268001);
    pub const OPERATION_DEFERRED_KHR: Self = Self(1000268002);
    pub const OPERATION_NOT_DEFERRED_KHR: Self = Self(1000268003);
}
#[doc = "Provided by [`crate::extensions::ext_pipeline_creation_cache_control`]"]
impl Result {
    pub const PIPELINE_COMPILE_REQUIRED_EXT: Self = Self(1000297000);
    pub const ERROR_PIPELINE_COMPILE_REQUIRED_EXT: Self = Self::PIPELINE_COMPILE_REQUIRED_EXT;
}
#[doc = "Provided by [`crate::extensions::khr_maintenance1`]"]
impl Result {
    pub const ERROR_OUT_OF_POOL_MEMORY_KHR: Self = Self::ERROR_OUT_OF_POOL_MEMORY;
}
#[doc = "Provided by [`crate::extensions::khr_external_memory`]"]
impl Result {
    pub const ERROR_INVALID_EXTERNAL_HANDLE_KHR: Self = Self::ERROR_INVALID_EXTERNAL_HANDLE;
}
#[doc = "Provided by [`crate::extensions::ext_descriptor_indexing`]"]
impl Result {
    pub const ERROR_FRAGMENTATION_EXT: Self = Self::ERROR_FRAGMENTATION;
}
#[doc = "Provided by [`crate::extensions::ext_buffer_device_address`]"]
impl Result {
    pub const ERROR_INVALID_DEVICE_ADDRESS_EXT: Self = Self::ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS;
}
#[doc = "Provided by [`crate::extensions::khr_buffer_device_address`]"]
impl Result {
    pub const ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR: Self =
        Self::ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkShaderStageFlags.html) · Bitmask of [`ShaderStageFlagBits`]"] # [doc (alias = "VkShaderStageFlags")] # [derive (Default)] # [repr (transparent)] pub struct ShaderStageFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const VERTEX = ShaderStageFlagBits :: VERTEX . 0 ; const TESSELLATION_CONTROL = ShaderStageFlagBits :: TESSELLATION_CONTROL . 0 ; const TESSELLATION_EVALUATION = ShaderStageFlagBits :: TESSELLATION_EVALUATION . 0 ; const GEOMETRY = ShaderStageFlagBits :: GEOMETRY . 0 ; const FRAGMENT = ShaderStageFlagBits :: FRAGMENT . 0 ; const COMPUTE = ShaderStageFlagBits :: COMPUTE . 0 ; const ALL_GRAPHICS = ShaderStageFlagBits :: ALL_GRAPHICS . 0 ; const ALL = ShaderStageFlagBits :: ALL . 0 ; const RAYGEN_KHR = ShaderStageFlagBits :: RAYGEN_KHR . 0 ; const ANY_HIT_KHR = ShaderStageFlagBits :: ANY_HIT_KHR . 0 ; const CLOSEST_HIT_KHR = ShaderStageFlagBits :: CLOSEST_HIT_KHR . 0 ; const MISS_KHR = ShaderStageFlagBits :: MISS_KHR . 0 ; const INTERSECTION_KHR = ShaderStageFlagBits :: INTERSECTION_KHR . 0 ; const CALLABLE_KHR = ShaderStageFlagBits :: CALLABLE_KHR . 0 ; const TASK_NV = ShaderStageFlagBits :: TASK_NV . 0 ; const MESH_NV = ShaderStageFlagBits :: MESH_NV . 0 ; const RAYGEN_NV = ShaderStageFlagBits :: RAYGEN_NV . 0 ; const ANY_HIT_NV = ShaderStageFlagBits :: ANY_HIT_NV . 0 ; const CLOSEST_HIT_NV = ShaderStageFlagBits :: CLOSEST_HIT_NV . 0 ; const MISS_NV = ShaderStageFlagBits :: MISS_NV . 0 ; const INTERSECTION_NV = ShaderStageFlagBits :: INTERSECTION_NV . 0 ; const CALLABLE_NV = ShaderStageFlagBits :: CALLABLE_NV . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkShaderStageFlagBits.html) · Bits enum of [`ShaderStageFlags`]"]
#[doc(alias = "VkShaderStageFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ShaderStageFlagBits(pub u32);
impl ShaderStageFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> ShaderStageFlags {
        ShaderStageFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for ShaderStageFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::VERTEX => "VERTEX",
            &Self::TESSELLATION_CONTROL => "TESSELLATION_CONTROL",
            &Self::TESSELLATION_EVALUATION => "TESSELLATION_EVALUATION",
            &Self::GEOMETRY => "GEOMETRY",
            &Self::FRAGMENT => "FRAGMENT",
            &Self::COMPUTE => "COMPUTE",
            &Self::ALL_GRAPHICS => "ALL_GRAPHICS",
            &Self::ALL => "ALL",
            &Self::RAYGEN_KHR => "RAYGEN_KHR",
            &Self::ANY_HIT_KHR => "ANY_HIT_KHR",
            &Self::CLOSEST_HIT_KHR => "CLOSEST_HIT_KHR",
            &Self::MISS_KHR => "MISS_KHR",
            &Self::INTERSECTION_KHR => "INTERSECTION_KHR",
            &Self::CALLABLE_KHR => "CALLABLE_KHR",
            &Self::TASK_NV => "TASK_NV",
            &Self::MESH_NV => "MESH_NV",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ShaderStageFlagBits {
    pub const VERTEX: Self = Self(1);
    pub const TESSELLATION_CONTROL: Self = Self(2);
    pub const TESSELLATION_EVALUATION: Self = Self(4);
    pub const GEOMETRY: Self = Self(8);
    pub const FRAGMENT: Self = Self(16);
    pub const COMPUTE: Self = Self(32);
    pub const ALL_GRAPHICS: Self = Self(31);
    pub const ALL: Self = Self(2147483647);
}
#[doc = "Provided by [`crate::extensions::khr_ray_tracing_pipeline`]"]
impl ShaderStageFlagBits {
    pub const RAYGEN_KHR: Self = Self(256);
    pub const ANY_HIT_KHR: Self = Self(512);
    pub const CLOSEST_HIT_KHR: Self = Self(1024);
    pub const MISS_KHR: Self = Self(2048);
    pub const INTERSECTION_KHR: Self = Self(4096);
    pub const CALLABLE_KHR: Self = Self(8192);
}
#[doc = "Provided by [`crate::extensions::nv_mesh_shader`]"]
impl ShaderStageFlagBits {
    pub const TASK_NV: Self = Self(64);
    pub const MESH_NV: Self = Self(128);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl ShaderStageFlagBits {
    pub const RAYGEN_NV: Self = Self::RAYGEN_KHR;
    pub const ANY_HIT_NV: Self = Self::ANY_HIT_KHR;
    pub const CLOSEST_HIT_NV: Self = Self::CLOSEST_HIT_KHR;
    pub const MISS_NV: Self = Self::MISS_KHR;
    pub const INTERSECTION_NV: Self = Self::INTERSECTION_KHR;
    pub const CALLABLE_NV: Self = Self::CALLABLE_KHR;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseMemoryBindFlags.html) · Bitmask of [`SparseMemoryBindFlagBits`]"] # [doc (alias = "VkSparseMemoryBindFlags")] # [derive (Default)] # [repr (transparent)] pub struct SparseMemoryBindFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const METADATA = SparseMemoryBindFlagBits :: METADATA . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseMemoryBindFlagBits.html) · Bits enum of [`SparseMemoryBindFlags`]"]
#[doc(alias = "VkSparseMemoryBindFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SparseMemoryBindFlagBits(pub u32);
impl SparseMemoryBindFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> SparseMemoryBindFlags {
        SparseMemoryBindFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for SparseMemoryBindFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::METADATA => "METADATA",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl SparseMemoryBindFlagBits {
    pub const METADATA: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkStencilFaceFlags.html) · Bitmask of [`StencilFaceFlagBits`]"] # [doc (alias = "VkStencilFaceFlags")] # [derive (Default)] # [repr (transparent)] pub struct StencilFaceFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const FRONT = StencilFaceFlagBits :: FRONT . 0 ; const BACK = StencilFaceFlagBits :: BACK . 0 ; const FRONT_AND_BACK = StencilFaceFlagBits :: FRONT_AND_BACK . 0 ; const STENCIL_FRONT_AND_BACK = StencilFaceFlagBits :: STENCIL_FRONT_AND_BACK . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkStencilFaceFlagBits.html) · Bits enum of [`StencilFaceFlags`]"]
#[doc(alias = "VkStencilFaceFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct StencilFaceFlagBits(pub u32);
impl StencilFaceFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> StencilFaceFlags {
        StencilFaceFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for StencilFaceFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::FRONT => "FRONT",
            &Self::BACK => "BACK",
            &Self::FRONT_AND_BACK => "FRONT_AND_BACK",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl StencilFaceFlagBits {
    pub const FRONT: Self = Self(1);
    pub const BACK: Self = Self(2);
    pub const FRONT_AND_BACK: Self = Self(3);
    pub const STENCIL_FRONT_AND_BACK: Self = Self::FRONT_AND_BACK;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkStencilOp.html) · Enum"]
#[doc(alias = "VkStencilOp")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct StencilOp(pub i32);
impl std::fmt::Debug for StencilOp {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::KEEP => "KEEP",
            &Self::ZERO => "ZERO",
            &Self::REPLACE => "REPLACE",
            &Self::INCREMENT_AND_CLAMP => "INCREMENT_AND_CLAMP",
            &Self::DECREMENT_AND_CLAMP => "DECREMENT_AND_CLAMP",
            &Self::INVERT => "INVERT",
            &Self::INCREMENT_AND_WRAP => "INCREMENT_AND_WRAP",
            &Self::DECREMENT_AND_WRAP => "DECREMENT_AND_WRAP",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl StencilOp {
    pub const KEEP: Self = Self(0);
    pub const ZERO: Self = Self(1);
    pub const REPLACE: Self = Self(2);
    pub const INCREMENT_AND_CLAMP: Self = Self(3);
    pub const DECREMENT_AND_CLAMP: Self = Self(4);
    pub const INVERT: Self = Self(5);
    pub const INCREMENT_AND_WRAP: Self = Self(6);
    pub const DECREMENT_AND_WRAP: Self = Self(7);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkStructureType.html) · Enum"]
#[doc(alias = "VkStructureType")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct StructureType(pub i32);
impl std::fmt::Debug for StructureType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::APPLICATION_INFO => "APPLICATION_INFO",
            &Self::INSTANCE_CREATE_INFO => "INSTANCE_CREATE_INFO",
            &Self::DEVICE_QUEUE_CREATE_INFO => "DEVICE_QUEUE_CREATE_INFO",
            &Self::DEVICE_CREATE_INFO => "DEVICE_CREATE_INFO",
            &Self::SUBMIT_INFO => "SUBMIT_INFO",
            &Self::MEMORY_ALLOCATE_INFO => "MEMORY_ALLOCATE_INFO",
            &Self::MAPPED_MEMORY_RANGE => "MAPPED_MEMORY_RANGE",
            &Self::BIND_SPARSE_INFO => "BIND_SPARSE_INFO",
            &Self::FENCE_CREATE_INFO => "FENCE_CREATE_INFO",
            &Self::SEMAPHORE_CREATE_INFO => "SEMAPHORE_CREATE_INFO",
            &Self::EVENT_CREATE_INFO => "EVENT_CREATE_INFO",
            &Self::QUERY_POOL_CREATE_INFO => "QUERY_POOL_CREATE_INFO",
            &Self::BUFFER_CREATE_INFO => "BUFFER_CREATE_INFO",
            &Self::BUFFER_VIEW_CREATE_INFO => "BUFFER_VIEW_CREATE_INFO",
            &Self::IMAGE_CREATE_INFO => "IMAGE_CREATE_INFO",
            &Self::IMAGE_VIEW_CREATE_INFO => "IMAGE_VIEW_CREATE_INFO",
            &Self::SHADER_MODULE_CREATE_INFO => "SHADER_MODULE_CREATE_INFO",
            &Self::PIPELINE_CACHE_CREATE_INFO => "PIPELINE_CACHE_CREATE_INFO",
            &Self::PIPELINE_SHADER_STAGE_CREATE_INFO => "PIPELINE_SHADER_STAGE_CREATE_INFO",
            &Self::PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO => {
                "PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"
            }
            &Self::PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO => {
                "PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"
            }
            &Self::PIPELINE_TESSELLATION_STATE_CREATE_INFO => {
                "PIPELINE_TESSELLATION_STATE_CREATE_INFO"
            }
            &Self::PIPELINE_VIEWPORT_STATE_CREATE_INFO => "PIPELINE_VIEWPORT_STATE_CREATE_INFO",
            &Self::PIPELINE_RASTERIZATION_STATE_CREATE_INFO => {
                "PIPELINE_RASTERIZATION_STATE_CREATE_INFO"
            }
            &Self::PIPELINE_MULTISAMPLE_STATE_CREATE_INFO => {
                "PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"
            }
            &Self::PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO => {
                "PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"
            }
            &Self::PIPELINE_COLOR_BLEND_STATE_CREATE_INFO => {
                "PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"
            }
            &Self::PIPELINE_DYNAMIC_STATE_CREATE_INFO => "PIPELINE_DYNAMIC_STATE_CREATE_INFO",
            &Self::GRAPHICS_PIPELINE_CREATE_INFO => "GRAPHICS_PIPELINE_CREATE_INFO",
            &Self::COMPUTE_PIPELINE_CREATE_INFO => "COMPUTE_PIPELINE_CREATE_INFO",
            &Self::PIPELINE_LAYOUT_CREATE_INFO => "PIPELINE_LAYOUT_CREATE_INFO",
            &Self::SAMPLER_CREATE_INFO => "SAMPLER_CREATE_INFO",
            &Self::DESCRIPTOR_SET_LAYOUT_CREATE_INFO => "DESCRIPTOR_SET_LAYOUT_CREATE_INFO",
            &Self::DESCRIPTOR_POOL_CREATE_INFO => "DESCRIPTOR_POOL_CREATE_INFO",
            &Self::DESCRIPTOR_SET_ALLOCATE_INFO => "DESCRIPTOR_SET_ALLOCATE_INFO",
            &Self::WRITE_DESCRIPTOR_SET => "WRITE_DESCRIPTOR_SET",
            &Self::COPY_DESCRIPTOR_SET => "COPY_DESCRIPTOR_SET",
            &Self::FRAMEBUFFER_CREATE_INFO => "FRAMEBUFFER_CREATE_INFO",
            &Self::RENDER_PASS_CREATE_INFO => "RENDER_PASS_CREATE_INFO",
            &Self::COMMAND_POOL_CREATE_INFO => "COMMAND_POOL_CREATE_INFO",
            &Self::COMMAND_BUFFER_ALLOCATE_INFO => "COMMAND_BUFFER_ALLOCATE_INFO",
            &Self::COMMAND_BUFFER_INHERITANCE_INFO => "COMMAND_BUFFER_INHERITANCE_INFO",
            &Self::COMMAND_BUFFER_BEGIN_INFO => "COMMAND_BUFFER_BEGIN_INFO",
            &Self::RENDER_PASS_BEGIN_INFO => "RENDER_PASS_BEGIN_INFO",
            &Self::BUFFER_MEMORY_BARRIER => "BUFFER_MEMORY_BARRIER",
            &Self::IMAGE_MEMORY_BARRIER => "IMAGE_MEMORY_BARRIER",
            &Self::MEMORY_BARRIER => "MEMORY_BARRIER",
            &Self::LOADER_INSTANCE_CREATE_INFO => "LOADER_INSTANCE_CREATE_INFO",
            &Self::LOADER_DEVICE_CREATE_INFO => "LOADER_DEVICE_CREATE_INFO",
            &Self::PHYSICAL_DEVICE_SUBGROUP_PROPERTIES => "PHYSICAL_DEVICE_SUBGROUP_PROPERTIES",
            &Self::BIND_BUFFER_MEMORY_INFO => "BIND_BUFFER_MEMORY_INFO",
            &Self::BIND_IMAGE_MEMORY_INFO => "BIND_IMAGE_MEMORY_INFO",
            &Self::PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES => {
                "PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"
            }
            &Self::MEMORY_DEDICATED_REQUIREMENTS => "MEMORY_DEDICATED_REQUIREMENTS",
            &Self::MEMORY_DEDICATED_ALLOCATE_INFO => "MEMORY_DEDICATED_ALLOCATE_INFO",
            &Self::MEMORY_ALLOCATE_FLAGS_INFO => "MEMORY_ALLOCATE_FLAGS_INFO",
            &Self::DEVICE_GROUP_RENDER_PASS_BEGIN_INFO => "DEVICE_GROUP_RENDER_PASS_BEGIN_INFO",
            &Self::DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO => {
                "DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"
            }
            &Self::DEVICE_GROUP_SUBMIT_INFO => "DEVICE_GROUP_SUBMIT_INFO",
            &Self::DEVICE_GROUP_BIND_SPARSE_INFO => "DEVICE_GROUP_BIND_SPARSE_INFO",
            &Self::BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO => "BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO",
            &Self::BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO => "BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO",
            &Self::PHYSICAL_DEVICE_GROUP_PROPERTIES => "PHYSICAL_DEVICE_GROUP_PROPERTIES",
            &Self::DEVICE_GROUP_DEVICE_CREATE_INFO => "DEVICE_GROUP_DEVICE_CREATE_INFO",
            &Self::BUFFER_MEMORY_REQUIREMENTS_INFO_2 => "BUFFER_MEMORY_REQUIREMENTS_INFO_2",
            &Self::IMAGE_MEMORY_REQUIREMENTS_INFO_2 => "IMAGE_MEMORY_REQUIREMENTS_INFO_2",
            &Self::IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 => {
                "IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"
            }
            &Self::MEMORY_REQUIREMENTS_2 => "MEMORY_REQUIREMENTS_2",
            &Self::SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 => "SPARSE_IMAGE_MEMORY_REQUIREMENTS_2",
            &Self::PHYSICAL_DEVICE_FEATURES_2 => "PHYSICAL_DEVICE_FEATURES_2",
            &Self::PHYSICAL_DEVICE_PROPERTIES_2 => "PHYSICAL_DEVICE_PROPERTIES_2",
            &Self::FORMAT_PROPERTIES_2 => "FORMAT_PROPERTIES_2",
            &Self::IMAGE_FORMAT_PROPERTIES_2 => "IMAGE_FORMAT_PROPERTIES_2",
            &Self::PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 => "PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2",
            &Self::QUEUE_FAMILY_PROPERTIES_2 => "QUEUE_FAMILY_PROPERTIES_2",
            &Self::PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 => "PHYSICAL_DEVICE_MEMORY_PROPERTIES_2",
            &Self::SPARSE_IMAGE_FORMAT_PROPERTIES_2 => "SPARSE_IMAGE_FORMAT_PROPERTIES_2",
            &Self::PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 => {
                "PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"
            }
            &Self::PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES => {
                "PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"
            }
            &Self::RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO => {
                "RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"
            }
            &Self::IMAGE_VIEW_USAGE_CREATE_INFO => "IMAGE_VIEW_USAGE_CREATE_INFO",
            &Self::PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO => {
                "PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"
            }
            &Self::RENDER_PASS_MULTIVIEW_CREATE_INFO => "RENDER_PASS_MULTIVIEW_CREATE_INFO",
            &Self::PHYSICAL_DEVICE_MULTIVIEW_FEATURES => "PHYSICAL_DEVICE_MULTIVIEW_FEATURES",
            &Self::PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES => "PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES",
            &Self::PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES => {
                "PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES"
            }
            &Self::PROTECTED_SUBMIT_INFO => "PROTECTED_SUBMIT_INFO",
            &Self::PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES => {
                "PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES => {
                "PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"
            }
            &Self::DEVICE_QUEUE_INFO_2 => "DEVICE_QUEUE_INFO_2",
            &Self::SAMPLER_YCBCR_CONVERSION_CREATE_INFO => "SAMPLER_YCBCR_CONVERSION_CREATE_INFO",
            &Self::SAMPLER_YCBCR_CONVERSION_INFO => "SAMPLER_YCBCR_CONVERSION_INFO",
            &Self::BIND_IMAGE_PLANE_MEMORY_INFO => "BIND_IMAGE_PLANE_MEMORY_INFO",
            &Self::IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO => "IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO",
            &Self::PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES => {
                "PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"
            }
            &Self::SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES => {
                "SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"
            }
            &Self::DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO => {
                "DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"
            }
            &Self::PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO => {
                "PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"
            }
            &Self::EXTERNAL_IMAGE_FORMAT_PROPERTIES => "EXTERNAL_IMAGE_FORMAT_PROPERTIES",
            &Self::PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO => "PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO",
            &Self::EXTERNAL_BUFFER_PROPERTIES => "EXTERNAL_BUFFER_PROPERTIES",
            &Self::PHYSICAL_DEVICE_ID_PROPERTIES => "PHYSICAL_DEVICE_ID_PROPERTIES",
            &Self::EXTERNAL_MEMORY_BUFFER_CREATE_INFO => "EXTERNAL_MEMORY_BUFFER_CREATE_INFO",
            &Self::EXTERNAL_MEMORY_IMAGE_CREATE_INFO => "EXTERNAL_MEMORY_IMAGE_CREATE_INFO",
            &Self::EXPORT_MEMORY_ALLOCATE_INFO => "EXPORT_MEMORY_ALLOCATE_INFO",
            &Self::PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO => "PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO",
            &Self::EXTERNAL_FENCE_PROPERTIES => "EXTERNAL_FENCE_PROPERTIES",
            &Self::EXPORT_FENCE_CREATE_INFO => "EXPORT_FENCE_CREATE_INFO",
            &Self::EXPORT_SEMAPHORE_CREATE_INFO => "EXPORT_SEMAPHORE_CREATE_INFO",
            &Self::PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO => {
                "PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"
            }
            &Self::EXTERNAL_SEMAPHORE_PROPERTIES => "EXTERNAL_SEMAPHORE_PROPERTIES",
            &Self::PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES => {
                "PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"
            }
            &Self::DESCRIPTOR_SET_LAYOUT_SUPPORT => "DESCRIPTOR_SET_LAYOUT_SUPPORT",
            &Self::PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES => {
                "PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_VULKAN_1_1_FEATURES => "PHYSICAL_DEVICE_VULKAN_1_1_FEATURES",
            &Self::PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES => "PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES",
            &Self::PHYSICAL_DEVICE_VULKAN_1_2_FEATURES => "PHYSICAL_DEVICE_VULKAN_1_2_FEATURES",
            &Self::PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES => "PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES",
            &Self::IMAGE_FORMAT_LIST_CREATE_INFO => "IMAGE_FORMAT_LIST_CREATE_INFO",
            &Self::ATTACHMENT_DESCRIPTION_2 => "ATTACHMENT_DESCRIPTION_2",
            &Self::ATTACHMENT_REFERENCE_2 => "ATTACHMENT_REFERENCE_2",
            &Self::SUBPASS_DESCRIPTION_2 => "SUBPASS_DESCRIPTION_2",
            &Self::SUBPASS_DEPENDENCY_2 => "SUBPASS_DEPENDENCY_2",
            &Self::RENDER_PASS_CREATE_INFO_2 => "RENDER_PASS_CREATE_INFO_2",
            &Self::SUBPASS_BEGIN_INFO => "SUBPASS_BEGIN_INFO",
            &Self::SUBPASS_END_INFO => "SUBPASS_END_INFO",
            &Self::PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES => "PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES",
            &Self::PHYSICAL_DEVICE_DRIVER_PROPERTIES => "PHYSICAL_DEVICE_DRIVER_PROPERTIES",
            &Self::PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES => {
                "PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES => {
                "PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES => {
                "PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES"
            }
            &Self::DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO => {
                "DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO"
            }
            &Self::PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES => {
                "PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES => {
                "PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES"
            }
            &Self::DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO => {
                "DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO"
            }
            &Self::DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT => {
                "DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT"
            }
            &Self::PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES => {
                "PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES"
            }
            &Self::SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE => {
                "SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE"
            }
            &Self::PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES => {
                "PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES"
            }
            &Self::IMAGE_STENCIL_USAGE_CREATE_INFO => "IMAGE_STENCIL_USAGE_CREATE_INFO",
            &Self::PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES => {
                "PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES"
            }
            &Self::SAMPLER_REDUCTION_MODE_CREATE_INFO => "SAMPLER_REDUCTION_MODE_CREATE_INFO",
            &Self::PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES => {
                "PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES => {
                "PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES"
            }
            &Self::FRAMEBUFFER_ATTACHMENTS_CREATE_INFO => "FRAMEBUFFER_ATTACHMENTS_CREATE_INFO",
            &Self::FRAMEBUFFER_ATTACHMENT_IMAGE_INFO => "FRAMEBUFFER_ATTACHMENT_IMAGE_INFO",
            &Self::RENDER_PASS_ATTACHMENT_BEGIN_INFO => "RENDER_PASS_ATTACHMENT_BEGIN_INFO",
            &Self::PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES => {
                "PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES => {
                "PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES => {
                "PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES"
            }
            &Self::ATTACHMENT_REFERENCE_STENCIL_LAYOUT => "ATTACHMENT_REFERENCE_STENCIL_LAYOUT",
            &Self::ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT => "ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT",
            &Self::PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES => {
                "PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES => {
                "PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES"
            }
            &Self::PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES => {
                "PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES"
            }
            &Self::SEMAPHORE_TYPE_CREATE_INFO => "SEMAPHORE_TYPE_CREATE_INFO",
            &Self::TIMELINE_SEMAPHORE_SUBMIT_INFO => "TIMELINE_SEMAPHORE_SUBMIT_INFO",
            &Self::SEMAPHORE_WAIT_INFO => "SEMAPHORE_WAIT_INFO",
            &Self::SEMAPHORE_SIGNAL_INFO => "SEMAPHORE_SIGNAL_INFO",
            &Self::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES => {
                "PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES"
            }
            &Self::BUFFER_DEVICE_ADDRESS_INFO => "BUFFER_DEVICE_ADDRESS_INFO",
            &Self::BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO => {
                "BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO"
            }
            &Self::MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO => {
                "MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO"
            }
            &Self::DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO => {
                "DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO"
            }
            &Self::SWAPCHAIN_CREATE_INFO_KHR => "SWAPCHAIN_CREATE_INFO_KHR",
            &Self::PRESENT_INFO_KHR => "PRESENT_INFO_KHR",
            &Self::DEVICE_GROUP_PRESENT_CAPABILITIES_KHR => "DEVICE_GROUP_PRESENT_CAPABILITIES_KHR",
            &Self::IMAGE_SWAPCHAIN_CREATE_INFO_KHR => "IMAGE_SWAPCHAIN_CREATE_INFO_KHR",
            &Self::BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR => "BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR",
            &Self::ACQUIRE_NEXT_IMAGE_INFO_KHR => "ACQUIRE_NEXT_IMAGE_INFO_KHR",
            &Self::DEVICE_GROUP_PRESENT_INFO_KHR => "DEVICE_GROUP_PRESENT_INFO_KHR",
            &Self::DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR => {
                "DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"
            }
            &Self::DISPLAY_MODE_CREATE_INFO_KHR => "DISPLAY_MODE_CREATE_INFO_KHR",
            &Self::DISPLAY_SURFACE_CREATE_INFO_KHR => "DISPLAY_SURFACE_CREATE_INFO_KHR",
            &Self::DISPLAY_PRESENT_INFO_KHR => "DISPLAY_PRESENT_INFO_KHR",
            &Self::XLIB_SURFACE_CREATE_INFO_KHR => "XLIB_SURFACE_CREATE_INFO_KHR",
            &Self::XCB_SURFACE_CREATE_INFO_KHR => "XCB_SURFACE_CREATE_INFO_KHR",
            &Self::WAYLAND_SURFACE_CREATE_INFO_KHR => "WAYLAND_SURFACE_CREATE_INFO_KHR",
            &Self::ANDROID_SURFACE_CREATE_INFO_KHR => "ANDROID_SURFACE_CREATE_INFO_KHR",
            &Self::WIN32_SURFACE_CREATE_INFO_KHR => "WIN32_SURFACE_CREATE_INFO_KHR",
            &Self::DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT => "DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT",
            &Self::PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD => {
                "PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"
            }
            &Self::DEBUG_MARKER_OBJECT_NAME_INFO_EXT => "DEBUG_MARKER_OBJECT_NAME_INFO_EXT",
            &Self::DEBUG_MARKER_OBJECT_TAG_INFO_EXT => "DEBUG_MARKER_OBJECT_TAG_INFO_EXT",
            &Self::DEBUG_MARKER_MARKER_INFO_EXT => "DEBUG_MARKER_MARKER_INFO_EXT",
            &Self::DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV => {
                "DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"
            }
            &Self::DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV => {
                "DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"
            }
            &Self::DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV => {
                "DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT => {
                "PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT"
            }
            &Self::PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT => {
                "PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT"
            }
            &Self::IMAGE_VIEW_HANDLE_INFO_NVX => "IMAGE_VIEW_HANDLE_INFO_NVX",
            &Self::IMAGE_VIEW_ADDRESS_PROPERTIES_NVX => "IMAGE_VIEW_ADDRESS_PROPERTIES_NVX",
            &Self::TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD => {
                "TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"
            }
            &Self::STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP => {
                "STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP"
            }
            &Self::PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV => {
                "PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV"
            }
            &Self::EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV => "EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV",
            &Self::EXPORT_MEMORY_ALLOCATE_INFO_NV => "EXPORT_MEMORY_ALLOCATE_INFO_NV",
            &Self::IMPORT_MEMORY_WIN32_HANDLE_INFO_NV => "IMPORT_MEMORY_WIN32_HANDLE_INFO_NV",
            &Self::EXPORT_MEMORY_WIN32_HANDLE_INFO_NV => "EXPORT_MEMORY_WIN32_HANDLE_INFO_NV",
            &Self::WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV => {
                "WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"
            }
            &Self::VALIDATION_FLAGS_EXT => "VALIDATION_FLAGS_EXT",
            &Self::VI_SURFACE_CREATE_INFO_NN => "VI_SURFACE_CREATE_INFO_NN",
            &Self::PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT => {
                "PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT"
            }
            &Self::IMAGE_VIEW_ASTC_DECODE_MODE_EXT => "IMAGE_VIEW_ASTC_DECODE_MODE_EXT",
            &Self::PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT => {
                "PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT"
            }
            &Self::IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR => "IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR",
            &Self::EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR => "EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR",
            &Self::MEMORY_WIN32_HANDLE_PROPERTIES_KHR => "MEMORY_WIN32_HANDLE_PROPERTIES_KHR",
            &Self::MEMORY_GET_WIN32_HANDLE_INFO_KHR => "MEMORY_GET_WIN32_HANDLE_INFO_KHR",
            &Self::IMPORT_MEMORY_FD_INFO_KHR => "IMPORT_MEMORY_FD_INFO_KHR",
            &Self::MEMORY_FD_PROPERTIES_KHR => "MEMORY_FD_PROPERTIES_KHR",
            &Self::MEMORY_GET_FD_INFO_KHR => "MEMORY_GET_FD_INFO_KHR",
            &Self::WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR => {
                "WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"
            }
            &Self::IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR => {
                "IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
            }
            &Self::EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR => {
                "EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
            }
            &Self::D3D12_FENCE_SUBMIT_INFO_KHR => "D3D12_FENCE_SUBMIT_INFO_KHR",
            &Self::SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR => "SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR",
            &Self::IMPORT_SEMAPHORE_FD_INFO_KHR => "IMPORT_SEMAPHORE_FD_INFO_KHR",
            &Self::SEMAPHORE_GET_FD_INFO_KHR => "SEMAPHORE_GET_FD_INFO_KHR",
            &Self::PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR => {
                "PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"
            }
            &Self::COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT => {
                "COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT => {
                "PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT"
            }
            &Self::CONDITIONAL_RENDERING_BEGIN_INFO_EXT => "CONDITIONAL_RENDERING_BEGIN_INFO_EXT",
            &Self::PRESENT_REGIONS_KHR => "PRESENT_REGIONS_KHR",
            &Self::PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV => {
                "PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"
            }
            &Self::SURFACE_CAPABILITIES_2_EXT => "SURFACE_CAPABILITIES_2_EXT",
            &Self::DISPLAY_POWER_INFO_EXT => "DISPLAY_POWER_INFO_EXT",
            &Self::DEVICE_EVENT_INFO_EXT => "DEVICE_EVENT_INFO_EXT",
            &Self::DISPLAY_EVENT_INFO_EXT => "DISPLAY_EVENT_INFO_EXT",
            &Self::SWAPCHAIN_COUNTER_CREATE_INFO_EXT => "SWAPCHAIN_COUNTER_CREATE_INFO_EXT",
            &Self::PRESENT_TIMES_INFO_GOOGLE => "PRESENT_TIMES_INFO_GOOGLE",
            &Self::PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX => {
                "PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"
            }
            &Self::PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV => {
                "PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"
            }
            &Self::PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT => {
                "PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"
            }
            &Self::PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT => {
                "PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT => {
                "PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT"
            }
            &Self::PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT => {
                "PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT"
            }
            &Self::HDR_METADATA_EXT => "HDR_METADATA_EXT",
            &Self::SHARED_PRESENT_SURFACE_CAPABILITIES_KHR => {
                "SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"
            }
            &Self::IMPORT_FENCE_WIN32_HANDLE_INFO_KHR => "IMPORT_FENCE_WIN32_HANDLE_INFO_KHR",
            &Self::EXPORT_FENCE_WIN32_HANDLE_INFO_KHR => "EXPORT_FENCE_WIN32_HANDLE_INFO_KHR",
            &Self::FENCE_GET_WIN32_HANDLE_INFO_KHR => "FENCE_GET_WIN32_HANDLE_INFO_KHR",
            &Self::IMPORT_FENCE_FD_INFO_KHR => "IMPORT_FENCE_FD_INFO_KHR",
            &Self::FENCE_GET_FD_INFO_KHR => "FENCE_GET_FD_INFO_KHR",
            &Self::PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR => {
                "PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR"
            }
            &Self::PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR => {
                "PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR"
            }
            &Self::QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR => {
                "QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR"
            }
            &Self::PERFORMANCE_QUERY_SUBMIT_INFO_KHR => "PERFORMANCE_QUERY_SUBMIT_INFO_KHR",
            &Self::ACQUIRE_PROFILING_LOCK_INFO_KHR => "ACQUIRE_PROFILING_LOCK_INFO_KHR",
            &Self::PERFORMANCE_COUNTER_KHR => "PERFORMANCE_COUNTER_KHR",
            &Self::PERFORMANCE_COUNTER_DESCRIPTION_KHR => "PERFORMANCE_COUNTER_DESCRIPTION_KHR",
            &Self::PHYSICAL_DEVICE_SURFACE_INFO_2_KHR => "PHYSICAL_DEVICE_SURFACE_INFO_2_KHR",
            &Self::SURFACE_CAPABILITIES_2_KHR => "SURFACE_CAPABILITIES_2_KHR",
            &Self::SURFACE_FORMAT_2_KHR => "SURFACE_FORMAT_2_KHR",
            &Self::DISPLAY_PROPERTIES_2_KHR => "DISPLAY_PROPERTIES_2_KHR",
            &Self::DISPLAY_PLANE_PROPERTIES_2_KHR => "DISPLAY_PLANE_PROPERTIES_2_KHR",
            &Self::DISPLAY_MODE_PROPERTIES_2_KHR => "DISPLAY_MODE_PROPERTIES_2_KHR",
            &Self::DISPLAY_PLANE_INFO_2_KHR => "DISPLAY_PLANE_INFO_2_KHR",
            &Self::DISPLAY_PLANE_CAPABILITIES_2_KHR => "DISPLAY_PLANE_CAPABILITIES_2_KHR",
            &Self::IOS_SURFACE_CREATE_INFO_MVK => "IOS_SURFACE_CREATE_INFO_MVK",
            &Self::MACOS_SURFACE_CREATE_INFO_MVK => "MACOS_SURFACE_CREATE_INFO_MVK",
            &Self::DEBUG_UTILS_OBJECT_NAME_INFO_EXT => "DEBUG_UTILS_OBJECT_NAME_INFO_EXT",
            &Self::DEBUG_UTILS_OBJECT_TAG_INFO_EXT => "DEBUG_UTILS_OBJECT_TAG_INFO_EXT",
            &Self::DEBUG_UTILS_LABEL_EXT => "DEBUG_UTILS_LABEL_EXT",
            &Self::DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT => {
                "DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"
            }
            &Self::DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT => "DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT",
            &Self::ANDROID_HARDWARE_BUFFER_USAGE_ANDROID => "ANDROID_HARDWARE_BUFFER_USAGE_ANDROID",
            &Self::ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID => {
                "ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"
            }
            &Self::ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID => {
                "ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"
            }
            &Self::IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID => {
                "IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
            }
            &Self::MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID => {
                "MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
            }
            &Self::EXTERNAL_FORMAT_ANDROID => "EXTERNAL_FORMAT_ANDROID",
            &Self::PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT => {
                "PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT"
            }
            &Self::WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT => {
                "WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT"
            }
            &Self::DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT => {
                "DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT"
            }
            &Self::SAMPLE_LOCATIONS_INFO_EXT => "SAMPLE_LOCATIONS_INFO_EXT",
            &Self::RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT => {
                "RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"
            }
            &Self::PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT => {
                "PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"
            }
            &Self::MULTISAMPLE_PROPERTIES_EXT => "MULTISAMPLE_PROPERTIES_EXT",
            &Self::PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT => {
                "PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"
            }
            &Self::PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT => {
                "PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"
            }
            &Self::PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV => {
                "PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"
            }
            &Self::WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR => {
                "WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR => {
                "ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR => {
                "ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR => {
                "ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR => {
                "ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR => {
                "ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_GEOMETRY_KHR => "ACCELERATION_STRUCTURE_GEOMETRY_KHR",
            &Self::ACCELERATION_STRUCTURE_VERSION_INFO_KHR => {
                "ACCELERATION_STRUCTURE_VERSION_INFO_KHR"
            }
            &Self::COPY_ACCELERATION_STRUCTURE_INFO_KHR => "COPY_ACCELERATION_STRUCTURE_INFO_KHR",
            &Self::COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR => {
                "COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR"
            }
            &Self::COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR => {
                "COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR"
            }
            &Self::PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR => {
                "PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR"
            }
            &Self::PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR => {
                "PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_CREATE_INFO_KHR => {
                "ACCELERATION_STRUCTURE_CREATE_INFO_KHR"
            }
            &Self::ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR => {
                "ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR"
            }
            &Self::PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR => {
                "PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR"
            }
            &Self::PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR => {
                "PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR"
            }
            &Self::RAY_TRACING_PIPELINE_CREATE_INFO_KHR => "RAY_TRACING_PIPELINE_CREATE_INFO_KHR",
            &Self::RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR => {
                "RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR"
            }
            &Self::RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR => {
                "RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR"
            }
            &Self::PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR => {
                "PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR"
            }
            &Self::PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV => {
                "PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV => {
                "PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV"
            }
            &Self::PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV => {
                "PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV"
            }
            &Self::DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT => {
                "DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT"
            }
            &Self::PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT => {
                "PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT"
            }
            &Self::IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT => {
                "IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT"
            }
            &Self::IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT => {
                "IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT"
            }
            &Self::IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT => {
                "IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT"
            }
            &Self::VALIDATION_CACHE_CREATE_INFO_EXT => "VALIDATION_CACHE_CREATE_INFO_EXT",
            &Self::SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT => {
                "SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR => {
                "PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR"
            }
            &Self::PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR => {
                "PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR"
            }
            &Self::PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV => {
                "PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV => {
                "PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV"
            }
            &Self::PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV => {
                "PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV"
            }
            &Self::PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV => {
                "PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV"
            }
            &Self::RAY_TRACING_PIPELINE_CREATE_INFO_NV => "RAY_TRACING_PIPELINE_CREATE_INFO_NV",
            &Self::ACCELERATION_STRUCTURE_CREATE_INFO_NV => "ACCELERATION_STRUCTURE_CREATE_INFO_NV",
            &Self::GEOMETRY_NV => "GEOMETRY_NV",
            &Self::GEOMETRY_TRIANGLES_NV => "GEOMETRY_TRIANGLES_NV",
            &Self::GEOMETRY_AABB_NV => "GEOMETRY_AABB_NV",
            &Self::BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV => {
                "BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV"
            }
            &Self::WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV => {
                "WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV"
            }
            &Self::ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV => {
                "ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV => {
                "PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV"
            }
            &Self::RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV => {
                "RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV"
            }
            &Self::ACCELERATION_STRUCTURE_INFO_NV => "ACCELERATION_STRUCTURE_INFO_NV",
            &Self::PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV => {
                "PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV"
            }
            &Self::PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV => {
                "PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT => {
                "PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT"
            }
            &Self::FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT => {
                "FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT"
            }
            &Self::DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT => {
                "DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"
            }
            &Self::IMPORT_MEMORY_HOST_POINTER_INFO_EXT => "IMPORT_MEMORY_HOST_POINTER_INFO_EXT",
            &Self::MEMORY_HOST_POINTER_PROPERTIES_EXT => "MEMORY_HOST_POINTER_PROPERTIES_EXT",
            &Self::PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"
            }
            &Self::PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR => {
                "PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR"
            }
            &Self::PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD => {
                "PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD"
            }
            &Self::CALIBRATED_TIMESTAMP_INFO_EXT => "CALIBRATED_TIMESTAMP_INFO_EXT",
            &Self::PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD => {
                "PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"
            }
            &Self::DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD => {
                "DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD"
            }
            &Self::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"
            }
            &Self::PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT => {
                "PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT => {
                "PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT"
            }
            &Self::PRESENT_FRAME_TOKEN_GGP => "PRESENT_FRAME_TOKEN_GGP",
            &Self::PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT => {
                "PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV => {
                "PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV"
            }
            &Self::PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV => {
                "PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV"
            }
            &Self::PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV => {
                "PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV => {
                "PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV"
            }
            &Self::PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV => {
                "PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV"
            }
            &Self::PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV => {
                "PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV => {
                "PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV"
            }
            &Self::CHECKPOINT_DATA_NV => "CHECKPOINT_DATA_NV",
            &Self::QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV => "QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV",
            &Self::PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL => {
                "PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL"
            }
            &Self::QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL => {
                "QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL"
            }
            &Self::INITIALIZE_PERFORMANCE_API_INFO_INTEL => "INITIALIZE_PERFORMANCE_API_INFO_INTEL",
            &Self::PERFORMANCE_MARKER_INFO_INTEL => "PERFORMANCE_MARKER_INFO_INTEL",
            &Self::PERFORMANCE_STREAM_MARKER_INFO_INTEL => "PERFORMANCE_STREAM_MARKER_INFO_INTEL",
            &Self::PERFORMANCE_OVERRIDE_INFO_INTEL => "PERFORMANCE_OVERRIDE_INFO_INTEL",
            &Self::PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL => {
                "PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL"
            }
            &Self::PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT"
            }
            &Self::DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD => {
                "DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD"
            }
            &Self::SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD => {
                "SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD"
            }
            &Self::IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA => "IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA",
            &Self::PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR => {
                "PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR"
            }
            &Self::METAL_SURFACE_CREATE_INFO_EXT => "METAL_SURFACE_CREATE_INFO_EXT",
            &Self::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT => {
                "PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT"
            }
            &Self::RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT => {
                "RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT"
            }
            &Self::PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT => {
                "PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT => {
                "PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT"
            }
            &Self::FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR => {
                "FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"
            }
            &Self::PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR => {
                "PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR => {
                "PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR => {
                "PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR => {
                "PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR"
            }
            &Self::PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD => {
                "PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD"
            }
            &Self::PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD => {
                "PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD"
            }
            &Self::PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT => {
                "PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT"
            }
            &Self::PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT => {
                "PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT"
            }
            &Self::MEMORY_PRIORITY_ALLOCATE_INFO_EXT => "MEMORY_PRIORITY_ALLOCATE_INFO_EXT",
            &Self::SURFACE_PROTECTED_CAPABILITIES_KHR => "SURFACE_PROTECTED_CAPABILITIES_KHR",
            &Self::PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV => {
                "PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV"
            }
            &Self::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT => {
                "PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT"
            }
            &Self::BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT => "BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT",
            &Self::PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT => "PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT",
            &Self::VALIDATION_FEATURES_EXT => "VALIDATION_FEATURES_EXT",
            &Self::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV => {
                "PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV"
            }
            &Self::COOPERATIVE_MATRIX_PROPERTIES_NV => "COOPERATIVE_MATRIX_PROPERTIES_NV",
            &Self::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV => {
                "PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV"
            }
            &Self::PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV => {
                "PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV"
            }
            &Self::PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV => {
                "PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV"
            }
            &Self::FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV => {
                "FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT => {
                "PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT => {
                "PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT"
            }
            &Self::SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT => {
                "SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT"
            }
            &Self::SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT => {
                "SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT"
            }
            &Self::SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT => {
                "SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT"
            }
            &Self::HEADLESS_SURFACE_CREATE_INFO_EXT => "HEADLESS_SURFACE_CREATE_INFO_EXT",
            &Self::PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT => {
                "PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT"
            }
            &Self::PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT => {
                "PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT"
            }
            &Self::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT => {
                "PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT => {
                "PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT => {
                "PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR => {
                "PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR"
            }
            &Self::PIPELINE_INFO_KHR => "PIPELINE_INFO_KHR",
            &Self::PIPELINE_EXECUTABLE_PROPERTIES_KHR => "PIPELINE_EXECUTABLE_PROPERTIES_KHR",
            &Self::PIPELINE_EXECUTABLE_INFO_KHR => "PIPELINE_EXECUTABLE_INFO_KHR",
            &Self::PIPELINE_EXECUTABLE_STATISTIC_KHR => "PIPELINE_EXECUTABLE_STATISTIC_KHR",
            &Self::PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR => {
                "PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"
            }
            &Self::PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT => {
                "PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV => {
                "PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV"
            }
            &Self::GRAPHICS_SHADER_GROUP_CREATE_INFO_NV => "GRAPHICS_SHADER_GROUP_CREATE_INFO_NV",
            &Self::GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV => {
                "GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV"
            }
            &Self::INDIRECT_COMMANDS_LAYOUT_TOKEN_NV => "INDIRECT_COMMANDS_LAYOUT_TOKEN_NV",
            &Self::INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV => {
                "INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV"
            }
            &Self::GENERATED_COMMANDS_INFO_NV => "GENERATED_COMMANDS_INFO_NV",
            &Self::GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV => {
                "GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV => {
                "PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV"
            }
            &Self::PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT => {
                "PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT"
            }
            &Self::COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM => {
                "COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM"
            }
            &Self::RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM => "RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM",
            &Self::PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT => {
                "PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT"
            }
            &Self::DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT => {
                "DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT"
            }
            &Self::DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT => {
                "DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT"
            }
            &Self::PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT => {
                "PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT"
            }
            &Self::SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT => {
                "SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT"
            }
            &Self::PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT"
            }
            &Self::PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT => {
                "PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT"
            }
            &Self::PIPELINE_LIBRARY_CREATE_INFO_KHR => "PIPELINE_LIBRARY_CREATE_INFO_KHR",
            &Self::PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT => {
                "PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT"
            }
            &Self::DEVICE_PRIVATE_DATA_CREATE_INFO_EXT => "DEVICE_PRIVATE_DATA_CREATE_INFO_EXT",
            &Self::PRIVATE_DATA_SLOT_CREATE_INFO_EXT => "PRIVATE_DATA_SLOT_CREATE_INFO_EXT",
            &Self::PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT => {
                "PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV => {
                "PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"
            }
            &Self::DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV => {
                "DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR => {
                "PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV => {
                "PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV => {
                "PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV"
            }
            &Self::PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV => {
                "PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT => {
                "PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT => {
                "PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT"
            }
            &Self::COPY_COMMAND_TRANSFORM_INFO_QCOM => "COPY_COMMAND_TRANSFORM_INFO_QCOM",
            &Self::PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT => {
                "PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT"
            }
            &Self::PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR => {
                "PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR"
            }
            &Self::COPY_BUFFER_INFO_2_KHR => "COPY_BUFFER_INFO_2_KHR",
            &Self::COPY_IMAGE_INFO_2_KHR => "COPY_IMAGE_INFO_2_KHR",
            &Self::COPY_BUFFER_TO_IMAGE_INFO_2_KHR => "COPY_BUFFER_TO_IMAGE_INFO_2_KHR",
            &Self::COPY_IMAGE_TO_BUFFER_INFO_2_KHR => "COPY_IMAGE_TO_BUFFER_INFO_2_KHR",
            &Self::BLIT_IMAGE_INFO_2_KHR => "BLIT_IMAGE_INFO_2_KHR",
            &Self::RESOLVE_IMAGE_INFO_2_KHR => "RESOLVE_IMAGE_INFO_2_KHR",
            &Self::BUFFER_COPY_2_KHR => "BUFFER_COPY_2_KHR",
            &Self::IMAGE_COPY_2_KHR => "IMAGE_COPY_2_KHR",
            &Self::IMAGE_BLIT_2_KHR => "IMAGE_BLIT_2_KHR",
            &Self::BUFFER_IMAGE_COPY_2_KHR => "BUFFER_IMAGE_COPY_2_KHR",
            &Self::IMAGE_RESOLVE_2_KHR => "IMAGE_RESOLVE_2_KHR",
            &Self::PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT => {
                "PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT"
            }
            &Self::DIRECTFB_SURFACE_CREATE_INFO_EXT => "DIRECTFB_SURFACE_CREATE_INFO_EXT",
            &Self::PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE => {
                "PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE"
            }
            &Self::MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE => {
                "MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE"
            }
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl StructureType {
    pub const APPLICATION_INFO: Self = Self(0);
    pub const INSTANCE_CREATE_INFO: Self = Self(1);
    pub const DEVICE_QUEUE_CREATE_INFO: Self = Self(2);
    pub const DEVICE_CREATE_INFO: Self = Self(3);
    pub const SUBMIT_INFO: Self = Self(4);
    pub const MEMORY_ALLOCATE_INFO: Self = Self(5);
    pub const MAPPED_MEMORY_RANGE: Self = Self(6);
    pub const BIND_SPARSE_INFO: Self = Self(7);
    pub const FENCE_CREATE_INFO: Self = Self(8);
    pub const SEMAPHORE_CREATE_INFO: Self = Self(9);
    pub const EVENT_CREATE_INFO: Self = Self(10);
    pub const QUERY_POOL_CREATE_INFO: Self = Self(11);
    pub const BUFFER_CREATE_INFO: Self = Self(12);
    pub const BUFFER_VIEW_CREATE_INFO: Self = Self(13);
    pub const IMAGE_CREATE_INFO: Self = Self(14);
    pub const IMAGE_VIEW_CREATE_INFO: Self = Self(15);
    pub const SHADER_MODULE_CREATE_INFO: Self = Self(16);
    pub const PIPELINE_CACHE_CREATE_INFO: Self = Self(17);
    pub const PIPELINE_SHADER_STAGE_CREATE_INFO: Self = Self(18);
    pub const PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO: Self = Self(19);
    pub const PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO: Self = Self(20);
    pub const PIPELINE_TESSELLATION_STATE_CREATE_INFO: Self = Self(21);
    pub const PIPELINE_VIEWPORT_STATE_CREATE_INFO: Self = Self(22);
    pub const PIPELINE_RASTERIZATION_STATE_CREATE_INFO: Self = Self(23);
    pub const PIPELINE_MULTISAMPLE_STATE_CREATE_INFO: Self = Self(24);
    pub const PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO: Self = Self(25);
    pub const PIPELINE_COLOR_BLEND_STATE_CREATE_INFO: Self = Self(26);
    pub const PIPELINE_DYNAMIC_STATE_CREATE_INFO: Self = Self(27);
    pub const GRAPHICS_PIPELINE_CREATE_INFO: Self = Self(28);
    pub const COMPUTE_PIPELINE_CREATE_INFO: Self = Self(29);
    pub const PIPELINE_LAYOUT_CREATE_INFO: Self = Self(30);
    pub const SAMPLER_CREATE_INFO: Self = Self(31);
    pub const DESCRIPTOR_SET_LAYOUT_CREATE_INFO: Self = Self(32);
    pub const DESCRIPTOR_POOL_CREATE_INFO: Self = Self(33);
    pub const DESCRIPTOR_SET_ALLOCATE_INFO: Self = Self(34);
    pub const WRITE_DESCRIPTOR_SET: Self = Self(35);
    pub const COPY_DESCRIPTOR_SET: Self = Self(36);
    pub const FRAMEBUFFER_CREATE_INFO: Self = Self(37);
    pub const RENDER_PASS_CREATE_INFO: Self = Self(38);
    pub const COMMAND_POOL_CREATE_INFO: Self = Self(39);
    pub const COMMAND_BUFFER_ALLOCATE_INFO: Self = Self(40);
    pub const COMMAND_BUFFER_INHERITANCE_INFO: Self = Self(41);
    pub const COMMAND_BUFFER_BEGIN_INFO: Self = Self(42);
    pub const RENDER_PASS_BEGIN_INFO: Self = Self(43);
    pub const BUFFER_MEMORY_BARRIER: Self = Self(44);
    pub const IMAGE_MEMORY_BARRIER: Self = Self(45);
    pub const MEMORY_BARRIER: Self = Self(46);
    pub const LOADER_INSTANCE_CREATE_INFO: Self = Self(47);
    pub const LOADER_DEVICE_CREATE_INFO: Self = Self(48);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: Self = Self(1000094000);
    pub const BIND_BUFFER_MEMORY_INFO: Self = Self(1000157000);
    pub const BIND_IMAGE_MEMORY_INFO: Self = Self(1000157001);
    pub const PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: Self = Self(1000083000);
    pub const MEMORY_DEDICATED_REQUIREMENTS: Self = Self(1000127000);
    pub const MEMORY_DEDICATED_ALLOCATE_INFO: Self = Self(1000127001);
    pub const MEMORY_ALLOCATE_FLAGS_INFO: Self = Self(1000060000);
    pub const DEVICE_GROUP_RENDER_PASS_BEGIN_INFO: Self = Self(1000060003);
    pub const DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO: Self = Self(1000060004);
    pub const DEVICE_GROUP_SUBMIT_INFO: Self = Self(1000060005);
    pub const DEVICE_GROUP_BIND_SPARSE_INFO: Self = Self(1000060006);
    pub const BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO: Self = Self(1000060013);
    pub const BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO: Self = Self(1000060014);
    pub const PHYSICAL_DEVICE_GROUP_PROPERTIES: Self = Self(1000070000);
    pub const DEVICE_GROUP_DEVICE_CREATE_INFO: Self = Self(1000070001);
    pub const BUFFER_MEMORY_REQUIREMENTS_INFO_2: Self = Self(1000146000);
    pub const IMAGE_MEMORY_REQUIREMENTS_INFO_2: Self = Self(1000146001);
    pub const IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2: Self = Self(1000146002);
    pub const MEMORY_REQUIREMENTS_2: Self = Self(1000146003);
    pub const SPARSE_IMAGE_MEMORY_REQUIREMENTS_2: Self = Self(1000146004);
    pub const PHYSICAL_DEVICE_FEATURES_2: Self = Self(1000059000);
    pub const PHYSICAL_DEVICE_PROPERTIES_2: Self = Self(1000059001);
    pub const FORMAT_PROPERTIES_2: Self = Self(1000059002);
    pub const IMAGE_FORMAT_PROPERTIES_2: Self = Self(1000059003);
    pub const PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2: Self = Self(1000059004);
    pub const QUEUE_FAMILY_PROPERTIES_2: Self = Self(1000059005);
    pub const PHYSICAL_DEVICE_MEMORY_PROPERTIES_2: Self = Self(1000059006);
    pub const SPARSE_IMAGE_FORMAT_PROPERTIES_2: Self = Self(1000059007);
    pub const PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2: Self = Self(1000059008);
    pub const PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: Self = Self(1000117000);
    pub const RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO: Self = Self(1000117001);
    pub const IMAGE_VIEW_USAGE_CREATE_INFO: Self = Self(1000117002);
    pub const PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO: Self = Self(1000117003);
    pub const RENDER_PASS_MULTIVIEW_CREATE_INFO: Self = Self(1000053000);
    pub const PHYSICAL_DEVICE_MULTIVIEW_FEATURES: Self = Self(1000053001);
    pub const PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: Self = Self(1000053002);
    pub const PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: Self = Self(1000120000);
    pub const PROTECTED_SUBMIT_INFO: Self = Self(1000145000);
    pub const PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: Self = Self(1000145001);
    pub const PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES: Self = Self(1000145002);
    pub const DEVICE_QUEUE_INFO_2: Self = Self(1000145003);
    pub const SAMPLER_YCBCR_CONVERSION_CREATE_INFO: Self = Self(1000156000);
    pub const SAMPLER_YCBCR_CONVERSION_INFO: Self = Self(1000156001);
    pub const BIND_IMAGE_PLANE_MEMORY_INFO: Self = Self(1000156002);
    pub const IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: Self = Self(1000156003);
    pub const PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: Self = Self(1000156004);
    pub const SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: Self = Self(1000156005);
    pub const DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO: Self = Self(1000085000);
    pub const PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: Self = Self(1000071000);
    pub const EXTERNAL_IMAGE_FORMAT_PROPERTIES: Self = Self(1000071001);
    pub const PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO: Self = Self(1000071002);
    pub const EXTERNAL_BUFFER_PROPERTIES: Self = Self(1000071003);
    pub const PHYSICAL_DEVICE_ID_PROPERTIES: Self = Self(1000071004);
    pub const EXTERNAL_MEMORY_BUFFER_CREATE_INFO: Self = Self(1000072000);
    pub const EXTERNAL_MEMORY_IMAGE_CREATE_INFO: Self = Self(1000072001);
    pub const EXPORT_MEMORY_ALLOCATE_INFO: Self = Self(1000072002);
    pub const PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO: Self = Self(1000112000);
    pub const EXTERNAL_FENCE_PROPERTIES: Self = Self(1000112001);
    pub const EXPORT_FENCE_CREATE_INFO: Self = Self(1000113000);
    pub const EXPORT_SEMAPHORE_CREATE_INFO: Self = Self(1000077000);
    pub const PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO: Self = Self(1000076000);
    pub const EXTERNAL_SEMAPHORE_PROPERTIES: Self = Self(1000076001);
    pub const PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: Self = Self(1000168000);
    pub const DESCRIPTOR_SET_LAYOUT_SUPPORT: Self = Self(1000168001);
    pub const PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: Self = Self(1000063000);
    pub const PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES: Self =
        Self::PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
    pub const PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES: Self =
        Self::PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: Self = Self(49);
    pub const PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: Self = Self(50);
    pub const PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: Self = Self(51);
    pub const PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: Self = Self(52);
    pub const IMAGE_FORMAT_LIST_CREATE_INFO: Self = Self(1000147000);
    pub const ATTACHMENT_DESCRIPTION_2: Self = Self(1000109000);
    pub const ATTACHMENT_REFERENCE_2: Self = Self(1000109001);
    pub const SUBPASS_DESCRIPTION_2: Self = Self(1000109002);
    pub const SUBPASS_DEPENDENCY_2: Self = Self(1000109003);
    pub const RENDER_PASS_CREATE_INFO_2: Self = Self(1000109004);
    pub const SUBPASS_BEGIN_INFO: Self = Self(1000109005);
    pub const SUBPASS_END_INFO: Self = Self(1000109006);
    pub const PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: Self = Self(1000177000);
    pub const PHYSICAL_DEVICE_DRIVER_PROPERTIES: Self = Self(1000196000);
    pub const PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: Self = Self(1000180000);
    pub const PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: Self = Self(1000082000);
    pub const PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES: Self = Self(1000197000);
    pub const DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO: Self = Self(1000161000);
    pub const PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: Self = Self(1000161001);
    pub const PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES: Self = Self(1000161002);
    pub const DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO: Self = Self(1000161003);
    pub const DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT: Self = Self(1000161004);
    pub const PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: Self = Self(1000199000);
    pub const SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE: Self = Self(1000199001);
    pub const PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: Self = Self(1000221000);
    pub const IMAGE_STENCIL_USAGE_CREATE_INFO: Self = Self(1000246000);
    pub const PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES: Self = Self(1000130000);
    pub const SAMPLER_REDUCTION_MODE_CREATE_INFO: Self = Self(1000130001);
    pub const PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: Self = Self(1000211000);
    pub const PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: Self = Self(1000108000);
    pub const FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: Self = Self(1000108001);
    pub const FRAMEBUFFER_ATTACHMENT_IMAGE_INFO: Self = Self(1000108002);
    pub const RENDER_PASS_ATTACHMENT_BEGIN_INFO: Self = Self(1000108003);
    pub const PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: Self = Self(1000253000);
    pub const PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: Self = Self(1000175000);
    pub const PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: Self = Self(1000241000);
    pub const ATTACHMENT_REFERENCE_STENCIL_LAYOUT: Self = Self(1000241001);
    pub const ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT: Self = Self(1000241002);
    pub const PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: Self = Self(1000261000);
    pub const PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: Self = Self(1000207000);
    pub const PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: Self = Self(1000207001);
    pub const SEMAPHORE_TYPE_CREATE_INFO: Self = Self(1000207002);
    pub const TIMELINE_SEMAPHORE_SUBMIT_INFO: Self = Self(1000207003);
    pub const SEMAPHORE_WAIT_INFO: Self = Self(1000207004);
    pub const SEMAPHORE_SIGNAL_INFO: Self = Self(1000207005);
    pub const PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: Self = Self(1000257000);
    pub const BUFFER_DEVICE_ADDRESS_INFO: Self = Self(1000244001);
    pub const BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO: Self = Self(1000257002);
    pub const MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO: Self = Self(1000257003);
    pub const DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO: Self = Self(1000257004);
}
#[doc = "Provided by [`crate::extensions::khr_swapchain`]"]
impl StructureType {
    pub const SWAPCHAIN_CREATE_INFO_KHR: Self = Self(1000001000);
    pub const PRESENT_INFO_KHR: Self = Self(1000001001);
    pub const DEVICE_GROUP_PRESENT_CAPABILITIES_KHR: Self = Self(1000060007);
    pub const IMAGE_SWAPCHAIN_CREATE_INFO_KHR: Self = Self(1000060008);
    pub const BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: Self = Self(1000060009);
    pub const ACQUIRE_NEXT_IMAGE_INFO_KHR: Self = Self(1000060010);
    pub const DEVICE_GROUP_PRESENT_INFO_KHR: Self = Self(1000060011);
    pub const DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR: Self = Self(1000060012);
}
#[doc = "Provided by [`crate::extensions::khr_display`]"]
impl StructureType {
    pub const DISPLAY_MODE_CREATE_INFO_KHR: Self = Self(1000002000);
    pub const DISPLAY_SURFACE_CREATE_INFO_KHR: Self = Self(1000002001);
}
#[doc = "Provided by [`crate::extensions::khr_display_swapchain`]"]
impl StructureType {
    pub const DISPLAY_PRESENT_INFO_KHR: Self = Self(1000003000);
}
#[doc = "Provided by [`crate::extensions::khr_xlib_surface`]"]
impl StructureType {
    pub const XLIB_SURFACE_CREATE_INFO_KHR: Self = Self(1000004000);
}
#[doc = "Provided by [`crate::extensions::khr_xcb_surface`]"]
impl StructureType {
    pub const XCB_SURFACE_CREATE_INFO_KHR: Self = Self(1000005000);
}
#[doc = "Provided by [`crate::extensions::khr_wayland_surface`]"]
impl StructureType {
    pub const WAYLAND_SURFACE_CREATE_INFO_KHR: Self = Self(1000006000);
}
#[doc = "Provided by [`crate::extensions::khr_android_surface`]"]
impl StructureType {
    pub const ANDROID_SURFACE_CREATE_INFO_KHR: Self = Self(1000008000);
}
#[doc = "Provided by [`crate::extensions::khr_win32_surface`]"]
impl StructureType {
    pub const WIN32_SURFACE_CREATE_INFO_KHR: Self = Self(1000009000);
}
#[doc = "Provided by [`crate::extensions::ext_debug_report`]"]
impl StructureType {
    pub const DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT: Self = Self(1000011000);
    pub const DEBUG_REPORT_CREATE_INFO_EXT: Self = Self::DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
}
#[doc = "Provided by [`crate::extensions::amd_rasterization_order`]"]
impl StructureType {
    pub const PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD: Self = Self(1000018000);
}
#[doc = "Provided by [`crate::extensions::ext_debug_marker`]"]
impl StructureType {
    pub const DEBUG_MARKER_OBJECT_NAME_INFO_EXT: Self = Self(1000022000);
    pub const DEBUG_MARKER_OBJECT_TAG_INFO_EXT: Self = Self(1000022001);
    pub const DEBUG_MARKER_MARKER_INFO_EXT: Self = Self(1000022002);
}
#[doc = "Provided by [`crate::extensions::nv_dedicated_allocation`]"]
impl StructureType {
    pub const DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV: Self = Self(1000026000);
    pub const DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV: Self = Self(1000026001);
    pub const DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV: Self = Self(1000026002);
}
#[doc = "Provided by [`crate::extensions::ext_transform_feedback`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: Self = Self(1000028000);
    pub const PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT: Self = Self(1000028001);
    pub const PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT: Self = Self(1000028002);
}
#[doc = "Provided by [`crate::extensions::nvx_image_view_handle`]"]
impl StructureType {
    pub const IMAGE_VIEW_HANDLE_INFO_NVX: Self = Self(1000030000);
    pub const IMAGE_VIEW_ADDRESS_PROPERTIES_NVX: Self = Self(1000030001);
}
#[doc = "Provided by [`crate::extensions::amd_texture_gather_bias_lod`]"]
impl StructureType {
    pub const TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD: Self = Self(1000041000);
}
#[doc = "Provided by [`crate::extensions::ggp_stream_descriptor_surface`]"]
impl StructureType {
    pub const STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP: Self = Self(1000049000);
}
#[doc = "Provided by [`crate::extensions::nv_corner_sampled_image`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: Self = Self(1000050000);
}
#[doc = "Provided by [`crate::extensions::nv_external_memory`]"]
impl StructureType {
    pub const EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV: Self = Self(1000056000);
    pub const EXPORT_MEMORY_ALLOCATE_INFO_NV: Self = Self(1000056001);
}
#[doc = "Provided by [`crate::extensions::nv_external_memory_win32`]"]
impl StructureType {
    pub const IMPORT_MEMORY_WIN32_HANDLE_INFO_NV: Self = Self(1000057000);
    pub const EXPORT_MEMORY_WIN32_HANDLE_INFO_NV: Self = Self(1000057001);
}
#[doc = "Provided by [`crate::extensions::nv_win32_keyed_mutex`]"]
impl StructureType {
    pub const WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV: Self = Self(1000058000);
}
#[doc = "Provided by [`crate::extensions::ext_validation_flags`]"]
impl StructureType {
    pub const VALIDATION_FLAGS_EXT: Self = Self(1000061000);
}
#[doc = "Provided by [`crate::extensions::nn_vi_surface`]"]
impl StructureType {
    pub const VI_SURFACE_CREATE_INFO_NN: Self = Self(1000062000);
}
#[doc = "Provided by [`crate::extensions::ext_texture_compression_astc_hdr`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT: Self = Self(1000066000);
}
#[doc = "Provided by [`crate::extensions::ext_astc_decode_mode`]"]
impl StructureType {
    pub const IMAGE_VIEW_ASTC_DECODE_MODE_EXT: Self = Self(1000067000);
    pub const PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT: Self = Self(1000067001);
}
#[doc = "Provided by [`crate::extensions::khr_external_memory_win32`]"]
impl StructureType {
    pub const IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR: Self = Self(1000073000);
    pub const EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR: Self = Self(1000073001);
    pub const MEMORY_WIN32_HANDLE_PROPERTIES_KHR: Self = Self(1000073002);
    pub const MEMORY_GET_WIN32_HANDLE_INFO_KHR: Self = Self(1000073003);
}
#[doc = "Provided by [`crate::extensions::khr_external_memory_fd`]"]
impl StructureType {
    pub const IMPORT_MEMORY_FD_INFO_KHR: Self = Self(1000074000);
    pub const MEMORY_FD_PROPERTIES_KHR: Self = Self(1000074001);
    pub const MEMORY_GET_FD_INFO_KHR: Self = Self(1000074002);
}
#[doc = "Provided by [`crate::extensions::khr_win32_keyed_mutex`]"]
impl StructureType {
    pub const WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR: Self = Self(1000075000);
}
#[doc = "Provided by [`crate::extensions::khr_external_semaphore_win32`]"]
impl StructureType {
    pub const IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR: Self = Self(1000078000);
    pub const EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR: Self = Self(1000078001);
    pub const D3D12_FENCE_SUBMIT_INFO_KHR: Self = Self(1000078002);
    pub const SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR: Self = Self(1000078003);
}
#[doc = "Provided by [`crate::extensions::khr_external_semaphore_fd`]"]
impl StructureType {
    pub const IMPORT_SEMAPHORE_FD_INFO_KHR: Self = Self(1000079000);
    pub const SEMAPHORE_GET_FD_INFO_KHR: Self = Self(1000079001);
}
#[doc = "Provided by [`crate::extensions::khr_push_descriptor`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR: Self = Self(1000080000);
}
#[doc = "Provided by [`crate::extensions::ext_conditional_rendering`]"]
impl StructureType {
    pub const COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT: Self = Self(1000081000);
    pub const PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: Self = Self(1000081001);
    pub const CONDITIONAL_RENDERING_BEGIN_INFO_EXT: Self = Self(1000081002);
}
#[doc = "Provided by [`crate::extensions::khr_incremental_present`]"]
impl StructureType {
    pub const PRESENT_REGIONS_KHR: Self = Self(1000084000);
}
#[doc = "Provided by [`crate::extensions::nv_clip_space_w_scaling`]"]
impl StructureType {
    pub const PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV: Self = Self(1000087000);
}
#[doc = "Provided by [`crate::extensions::ext_display_surface_counter`]"]
impl StructureType {
    pub const SURFACE_CAPABILITIES_2_EXT: Self = Self(1000090000);
    pub const SURFACE_CAPABILITIES2_EXT: Self = Self::SURFACE_CAPABILITIES_2_EXT;
}
#[doc = "Provided by [`crate::extensions::ext_display_control`]"]
impl StructureType {
    pub const DISPLAY_POWER_INFO_EXT: Self = Self(1000091000);
    pub const DEVICE_EVENT_INFO_EXT: Self = Self(1000091001);
    pub const DISPLAY_EVENT_INFO_EXT: Self = Self(1000091002);
    pub const SWAPCHAIN_COUNTER_CREATE_INFO_EXT: Self = Self(1000091003);
}
#[doc = "Provided by [`crate::extensions::google_display_timing`]"]
impl StructureType {
    pub const PRESENT_TIMES_INFO_GOOGLE: Self = Self(1000092000);
}
#[doc = "Provided by [`crate::extensions::nvx_multiview_per_view_attributes`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX: Self = Self(1000097000);
}
#[doc = "Provided by [`crate::extensions::nv_viewport_swizzle`]"]
impl StructureType {
    pub const PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV: Self = Self(1000098000);
}
#[doc = "Provided by [`crate::extensions::ext_discard_rectangles`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT: Self = Self(1000099000);
    pub const PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT: Self = Self(1000099001);
}
#[doc = "Provided by [`crate::extensions::ext_conservative_rasterization`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT: Self = Self(1000101000);
    pub const PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT: Self = Self(1000101001);
}
#[doc = "Provided by [`crate::extensions::ext_depth_clip_enable`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: Self = Self(1000102000);
    pub const PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT: Self = Self(1000102001);
}
#[doc = "Provided by [`crate::extensions::ext_hdr_metadata`]"]
impl StructureType {
    pub const HDR_METADATA_EXT: Self = Self(1000105000);
}
#[doc = "Provided by [`crate::extensions::khr_shared_presentable_image`]"]
impl StructureType {
    pub const SHARED_PRESENT_SURFACE_CAPABILITIES_KHR: Self = Self(1000111000);
}
#[doc = "Provided by [`crate::extensions::khr_external_fence_win32`]"]
impl StructureType {
    pub const IMPORT_FENCE_WIN32_HANDLE_INFO_KHR: Self = Self(1000114000);
    pub const EXPORT_FENCE_WIN32_HANDLE_INFO_KHR: Self = Self(1000114001);
    pub const FENCE_GET_WIN32_HANDLE_INFO_KHR: Self = Self(1000114002);
}
#[doc = "Provided by [`crate::extensions::khr_external_fence_fd`]"]
impl StructureType {
    pub const IMPORT_FENCE_FD_INFO_KHR: Self = Self(1000115000);
    pub const FENCE_GET_FD_INFO_KHR: Self = Self(1000115001);
}
#[doc = "Provided by [`crate::extensions::khr_performance_query`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: Self = Self(1000116000);
    pub const PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR: Self = Self(1000116001);
    pub const QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR: Self = Self(1000116002);
    pub const PERFORMANCE_QUERY_SUBMIT_INFO_KHR: Self = Self(1000116003);
    pub const ACQUIRE_PROFILING_LOCK_INFO_KHR: Self = Self(1000116004);
    pub const PERFORMANCE_COUNTER_KHR: Self = Self(1000116005);
    pub const PERFORMANCE_COUNTER_DESCRIPTION_KHR: Self = Self(1000116006);
}
#[doc = "Provided by [`crate::extensions::khr_get_surface_capabilities2`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SURFACE_INFO_2_KHR: Self = Self(1000119000);
    pub const SURFACE_CAPABILITIES_2_KHR: Self = Self(1000119001);
    pub const SURFACE_FORMAT_2_KHR: Self = Self(1000119002);
}
#[doc = "Provided by [`crate::extensions::khr_get_display_properties2`]"]
impl StructureType {
    pub const DISPLAY_PROPERTIES_2_KHR: Self = Self(1000121000);
    pub const DISPLAY_PLANE_PROPERTIES_2_KHR: Self = Self(1000121001);
    pub const DISPLAY_MODE_PROPERTIES_2_KHR: Self = Self(1000121002);
    pub const DISPLAY_PLANE_INFO_2_KHR: Self = Self(1000121003);
    pub const DISPLAY_PLANE_CAPABILITIES_2_KHR: Self = Self(1000121004);
}
#[doc = "Provided by [`crate::extensions::mvk_ios_surface`]"]
impl StructureType {
    pub const IOS_SURFACE_CREATE_INFO_MVK: Self = Self(1000122000);
}
#[doc = "Provided by [`crate::extensions::mvk_macos_surface`]"]
impl StructureType {
    pub const MACOS_SURFACE_CREATE_INFO_MVK: Self = Self(1000123000);
}
#[doc = "Provided by [`crate::extensions::ext_debug_utils`]"]
impl StructureType {
    pub const DEBUG_UTILS_OBJECT_NAME_INFO_EXT: Self = Self(1000128000);
    pub const DEBUG_UTILS_OBJECT_TAG_INFO_EXT: Self = Self(1000128001);
    pub const DEBUG_UTILS_LABEL_EXT: Self = Self(1000128002);
    pub const DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT: Self = Self(1000128003);
    pub const DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT: Self = Self(1000128004);
}
#[doc = "Provided by [`crate::extensions::android_external_memory_android_hardware_buffer`]"]
impl StructureType {
    pub const ANDROID_HARDWARE_BUFFER_USAGE_ANDROID: Self = Self(1000129000);
    pub const ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID: Self = Self(1000129001);
    pub const ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID: Self = Self(1000129002);
    pub const IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID: Self = Self(1000129003);
    pub const MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID: Self = Self(1000129004);
    pub const EXTERNAL_FORMAT_ANDROID: Self = Self(1000129005);
}
#[doc = "Provided by [`crate::extensions::ext_inline_uniform_block`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT: Self = Self(1000138000);
    pub const PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT: Self = Self(1000138001);
    pub const WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT: Self = Self(1000138002);
    pub const DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT: Self = Self(1000138003);
}
#[doc = "Provided by [`crate::extensions::ext_sample_locations`]"]
impl StructureType {
    pub const SAMPLE_LOCATIONS_INFO_EXT: Self = Self(1000143000);
    pub const RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT: Self = Self(1000143001);
    pub const PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT: Self = Self(1000143002);
    pub const PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT: Self = Self(1000143003);
    pub const MULTISAMPLE_PROPERTIES_EXT: Self = Self(1000143004);
}
#[doc = "Provided by [`crate::extensions::ext_blend_operation_advanced`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: Self = Self(1000148000);
    pub const PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT: Self = Self(1000148001);
    pub const PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT: Self = Self(1000148002);
}
#[doc = "Provided by [`crate::extensions::nv_fragment_coverage_to_color`]"]
impl StructureType {
    pub const PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV: Self = Self(1000149000);
}
#[doc = "Provided by [`crate::extensions::khr_acceleration_structure`]"]
impl StructureType {
    pub const WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR: Self = Self(1000150007);
    pub const ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR: Self = Self(1000150000);
    pub const ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR: Self = Self(1000150002);
    pub const ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR: Self = Self(1000150003);
    pub const ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR: Self = Self(1000150004);
    pub const ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR: Self = Self(1000150005);
    pub const ACCELERATION_STRUCTURE_GEOMETRY_KHR: Self = Self(1000150006);
    pub const ACCELERATION_STRUCTURE_VERSION_INFO_KHR: Self = Self(1000150009);
    pub const COPY_ACCELERATION_STRUCTURE_INFO_KHR: Self = Self(1000150010);
    pub const COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR: Self = Self(1000150011);
    pub const COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR: Self = Self(1000150012);
    pub const PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: Self = Self(1000150013);
    pub const PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR: Self = Self(1000150014);
    pub const ACCELERATION_STRUCTURE_CREATE_INFO_KHR: Self = Self(1000150017);
    pub const ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR: Self = Self(1000150020);
}
#[doc = "Provided by [`crate::extensions::khr_ray_tracing_pipeline`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR: Self = Self(1000347000);
    pub const PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR: Self = Self(1000347001);
    pub const RAY_TRACING_PIPELINE_CREATE_INFO_KHR: Self = Self(1000150015);
    pub const RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR: Self = Self(1000150016);
    pub const RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR: Self = Self(1000150018);
}
#[doc = "Provided by [`crate::extensions::khr_ray_query`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR: Self = Self(1000348013);
}
#[doc = "Provided by [`crate::extensions::nv_framebuffer_mixed_samples`]"]
impl StructureType {
    pub const PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV: Self = Self(1000152000);
}
#[doc = "Provided by [`crate::extensions::nv_shader_sm_builtins`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV: Self = Self(1000154000);
    pub const PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV: Self = Self(1000154001);
}
#[doc = "Provided by [`crate::extensions::ext_image_drm_format_modifier`]"]
impl StructureType {
    pub const DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT: Self = Self(1000158000);
    pub const PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT: Self = Self(1000158002);
    pub const IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT: Self = Self(1000158003);
    pub const IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT: Self = Self(1000158004);
    pub const IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT: Self = Self(1000158005);
}
#[doc = "Provided by [`crate::extensions::ext_validation_cache`]"]
impl StructureType {
    pub const VALIDATION_CACHE_CREATE_INFO_EXT: Self = Self(1000160000);
    pub const SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT: Self = Self(1000160001);
}
#[doc = "Provided by [`crate::extensions::khr_portability_subset`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR: Self = Self(1000163000);
    pub const PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR: Self = Self(1000163001);
}
#[doc = "Provided by [`crate::extensions::nv_shading_rate_image`]"]
impl StructureType {
    pub const PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV: Self = Self(1000164000);
    pub const PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV: Self = Self(1000164001);
    pub const PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV: Self = Self(1000164002);
    pub const PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV: Self = Self(1000164005);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl StructureType {
    pub const RAY_TRACING_PIPELINE_CREATE_INFO_NV: Self = Self(1000165000);
    pub const ACCELERATION_STRUCTURE_CREATE_INFO_NV: Self = Self(1000165001);
    pub const GEOMETRY_NV: Self = Self(1000165003);
    pub const GEOMETRY_TRIANGLES_NV: Self = Self(1000165004);
    pub const GEOMETRY_AABB_NV: Self = Self(1000165005);
    pub const BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV: Self = Self(1000165006);
    pub const WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV: Self = Self(1000165007);
    pub const ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV: Self = Self(1000165008);
    pub const PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV: Self = Self(1000165009);
    pub const RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV: Self = Self(1000165011);
    pub const ACCELERATION_STRUCTURE_INFO_NV: Self = Self(1000165012);
}
#[doc = "Provided by [`crate::extensions::nv_representative_fragment_test`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV: Self = Self(1000166000);
    pub const PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV: Self = Self(1000166001);
}
#[doc = "Provided by [`crate::extensions::ext_filter_cubic`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT: Self = Self(1000170000);
    pub const FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT: Self = Self(1000170001);
}
#[doc = "Provided by [`crate::extensions::ext_global_priority`]"]
impl StructureType {
    pub const DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT: Self = Self(1000174000);
}
#[doc = "Provided by [`crate::extensions::ext_external_memory_host`]"]
impl StructureType {
    pub const IMPORT_MEMORY_HOST_POINTER_INFO_EXT: Self = Self(1000178000);
    pub const MEMORY_HOST_POINTER_PROPERTIES_EXT: Self = Self(1000178001);
    pub const PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT: Self = Self(1000178002);
}
#[doc = "Provided by [`crate::extensions::khr_shader_clock`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: Self = Self(1000181000);
}
#[doc = "Provided by [`crate::extensions::amd_pipeline_compiler_control`]"]
impl StructureType {
    pub const PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD: Self = Self(1000183000);
}
#[doc = "Provided by [`crate::extensions::ext_calibrated_timestamps`]"]
impl StructureType {
    pub const CALIBRATED_TIMESTAMP_INFO_EXT: Self = Self(1000184000);
}
#[doc = "Provided by [`crate::extensions::amd_shader_core_properties`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD: Self = Self(1000185000);
}
#[doc = "Provided by [`crate::extensions::amd_memory_overallocation_behavior`]"]
impl StructureType {
    pub const DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD: Self = Self(1000189000);
}
#[doc = "Provided by [`crate::extensions::ext_vertex_attribute_divisor`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: Self = Self(1000190000);
    pub const PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT: Self = Self(1000190001);
    pub const PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: Self = Self(1000190002);
}
#[doc = "Provided by [`crate::extensions::ggp_frame_token`]"]
impl StructureType {
    pub const PRESENT_FRAME_TOKEN_GGP: Self = Self(1000191000);
}
#[doc = "Provided by [`crate::extensions::ext_pipeline_creation_feedback`]"]
impl StructureType {
    pub const PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT: Self = Self(1000192000);
}
#[doc = "Provided by [`crate::extensions::nv_compute_shader_derivatives`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV: Self = Self(1000201000);
}
#[doc = "Provided by [`crate::extensions::nv_mesh_shader`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV: Self = Self(1000202000);
    pub const PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV: Self = Self(1000202001);
}
#[doc = "Provided by [`crate::extensions::nv_fragment_shader_barycentric`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV: Self = Self(1000203000);
}
#[doc = "Provided by [`crate::extensions::nv_shader_image_footprint`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV: Self = Self(1000204000);
}
#[doc = "Provided by [`crate::extensions::nv_scissor_exclusive`]"]
impl StructureType {
    pub const PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV: Self = Self(1000205000);
    pub const PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV: Self = Self(1000205002);
}
#[doc = "Provided by [`crate::extensions::nv_device_diagnostic_checkpoints`]"]
impl StructureType {
    pub const CHECKPOINT_DATA_NV: Self = Self(1000206000);
    pub const QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV: Self = Self(1000206001);
}
#[doc = "Provided by [`crate::extensions::intel_shader_integer_functions2`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: Self = Self(1000209000);
}
#[doc = "Provided by [`crate::extensions::intel_performance_query`]"]
impl StructureType {
    pub const QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL: Self = Self(1000210000);
    pub const INITIALIZE_PERFORMANCE_API_INFO_INTEL: Self = Self(1000210001);
    pub const PERFORMANCE_MARKER_INFO_INTEL: Self = Self(1000210002);
    pub const PERFORMANCE_STREAM_MARKER_INFO_INTEL: Self = Self(1000210003);
    pub const PERFORMANCE_OVERRIDE_INFO_INTEL: Self = Self(1000210004);
    pub const PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL: Self = Self(1000210005);
    pub const QUERY_POOL_CREATE_INFO_INTEL: Self =
        Self::QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL;
}
#[doc = "Provided by [`crate::extensions::ext_pci_bus_info`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT: Self = Self(1000212000);
}
#[doc = "Provided by [`crate::extensions::amd_display_native_hdr`]"]
impl StructureType {
    pub const DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD: Self = Self(1000213000);
    pub const SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD: Self = Self(1000213001);
}
#[doc = "Provided by [`crate::extensions::fuchsia_imagepipe_surface`]"]
impl StructureType {
    pub const IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA: Self = Self(1000214000);
}
#[doc = "Provided by [`crate::extensions::khr_shader_terminate_invocation`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR: Self = Self(1000215000);
}
#[doc = "Provided by [`crate::extensions::ext_metal_surface`]"]
impl StructureType {
    pub const METAL_SURFACE_CREATE_INFO_EXT: Self = Self(1000217000);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: Self = Self(1000218000);
    pub const PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: Self = Self(1000218001);
    pub const RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT: Self = Self(1000218002);
}
#[doc = "Provided by [`crate::extensions::ext_subgroup_size_control`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT: Self = Self(1000225000);
    pub const PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT: Self = Self(1000225001);
    pub const PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT: Self = Self(1000225002);
}
#[doc = "Provided by [`crate::extensions::khr_fragment_shading_rate`]"]
impl StructureType {
    pub const FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: Self = Self(1000226000);
    pub const PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR: Self = Self(1000226001);
    pub const PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR: Self = Self(1000226002);
    pub const PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR: Self = Self(1000226003);
    pub const PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR: Self = Self(1000226004);
}
#[doc = "Provided by [`crate::extensions::amd_shader_core_properties2`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD: Self = Self(1000227000);
}
#[doc = "Provided by [`crate::extensions::amd_device_coherent_memory`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD: Self = Self(1000229000);
}
#[doc = "Provided by [`crate::extensions::ext_shader_image_atomic_int64`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: Self = Self(1000234000);
}
#[doc = "Provided by [`crate::extensions::ext_memory_budget`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT: Self = Self(1000237000);
}
#[doc = "Provided by [`crate::extensions::ext_memory_priority`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: Self = Self(1000238000);
    pub const MEMORY_PRIORITY_ALLOCATE_INFO_EXT: Self = Self(1000238001);
}
#[doc = "Provided by [`crate::extensions::khr_surface_protected_capabilities`]"]
impl StructureType {
    pub const SURFACE_PROTECTED_CAPABILITIES_KHR: Self = Self(1000239000);
}
#[doc = "Provided by [`crate::extensions::nv_dedicated_allocation_image_aliasing`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV: Self =
        Self(1000240000);
}
#[doc = "Provided by [`crate::extensions::ext_buffer_device_address`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT: Self = Self(1000244000);
    pub const BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT: Self = Self(1000244002);
    pub const PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT: Self =
        Self::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT;
    pub const BUFFER_DEVICE_ADDRESS_INFO_EXT: Self = Self::BUFFER_DEVICE_ADDRESS_INFO;
}
#[doc = "Provided by [`crate::extensions::ext_tooling_info`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT: Self = Self(1000245000);
}
#[doc = "Provided by [`crate::extensions::ext_validation_features`]"]
impl StructureType {
    pub const VALIDATION_FEATURES_EXT: Self = Self(1000247000);
}
#[doc = "Provided by [`crate::extensions::nv_cooperative_matrix`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV: Self = Self(1000249000);
    pub const COOPERATIVE_MATRIX_PROPERTIES_NV: Self = Self(1000249001);
    pub const PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV: Self = Self(1000249002);
}
#[doc = "Provided by [`crate::extensions::nv_coverage_reduction_mode`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV: Self = Self(1000250000);
    pub const PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV: Self = Self(1000250001);
    pub const FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV: Self = Self(1000250002);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_shader_interlock`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT: Self = Self(1000251000);
}
#[doc = "Provided by [`crate::extensions::ext_ycbcr_image_arrays`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT: Self = Self(1000252000);
}
#[doc = "Provided by [`crate::extensions::ext_full_screen_exclusive`]"]
impl StructureType {
    pub const SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT: Self = Self(1000255000);
    pub const SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT: Self = Self(1000255002);
    pub const SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT: Self = Self(1000255001);
}
#[doc = "Provided by [`crate::extensions::ext_headless_surface`]"]
impl StructureType {
    pub const HEADLESS_SURFACE_CREATE_INFO_EXT: Self = Self(1000256000);
}
#[doc = "Provided by [`crate::extensions::ext_line_rasterization`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: Self = Self(1000259000);
    pub const PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT: Self = Self(1000259001);
    pub const PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT: Self = Self(1000259002);
}
#[doc = "Provided by [`crate::extensions::ext_shader_atomic_float`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: Self = Self(1000260000);
}
#[doc = "Provided by [`crate::extensions::ext_index_type_uint8`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT: Self = Self(1000265000);
}
#[doc = "Provided by [`crate::extensions::ext_extended_dynamic_state`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: Self = Self(1000267000);
}
#[doc = "Provided by [`crate::extensions::khr_pipeline_executable_properties`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR: Self = Self(1000269000);
    pub const PIPELINE_INFO_KHR: Self = Self(1000269001);
    pub const PIPELINE_EXECUTABLE_PROPERTIES_KHR: Self = Self(1000269002);
    pub const PIPELINE_EXECUTABLE_INFO_KHR: Self = Self(1000269003);
    pub const PIPELINE_EXECUTABLE_STATISTIC_KHR: Self = Self(1000269004);
    pub const PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR: Self = Self(1000269005);
}
#[doc = "Provided by [`crate::extensions::ext_shader_demote_to_helper_invocation`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT: Self =
        Self(1000276000);
}
#[doc = "Provided by [`crate::extensions::nv_device_generated_commands`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV: Self = Self(1000277000);
    pub const GRAPHICS_SHADER_GROUP_CREATE_INFO_NV: Self = Self(1000277001);
    pub const GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV: Self = Self(1000277002);
    pub const INDIRECT_COMMANDS_LAYOUT_TOKEN_NV: Self = Self(1000277003);
    pub const INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV: Self = Self(1000277004);
    pub const GENERATED_COMMANDS_INFO_NV: Self = Self(1000277005);
    pub const GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV: Self = Self(1000277006);
    pub const PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV: Self = Self(1000277007);
}
#[doc = "Provided by [`crate::extensions::ext_texel_buffer_alignment`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: Self = Self(1000281000);
    pub const PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT: Self = Self(1000281001);
}
#[doc = "Provided by [`crate::extensions::qcom_render_pass_transform`]"]
impl StructureType {
    pub const COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM: Self = Self(1000282000);
    pub const RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM: Self = Self(1000282001);
}
#[doc = "Provided by [`crate::extensions::ext_device_memory_report`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT: Self = Self(1000284000);
    pub const DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT: Self = Self(1000284001);
    pub const DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT: Self = Self(1000284002);
}
#[doc = "Provided by [`crate::extensions::ext_robustness2`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: Self = Self(1000286000);
    pub const PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT: Self = Self(1000286001);
}
#[doc = "Provided by [`crate::extensions::ext_custom_border_color`]"]
impl StructureType {
    pub const SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT: Self = Self(1000287000);
    pub const PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT: Self = Self(1000287001);
    pub const PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: Self = Self(1000287002);
}
#[doc = "Provided by [`crate::extensions::khr_pipeline_library`]"]
impl StructureType {
    pub const PIPELINE_LIBRARY_CREATE_INFO_KHR: Self = Self(1000290000);
}
#[doc = "Provided by [`crate::extensions::ext_private_data`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT: Self = Self(1000295000);
    pub const DEVICE_PRIVATE_DATA_CREATE_INFO_EXT: Self = Self(1000295001);
    pub const PRIVATE_DATA_SLOT_CREATE_INFO_EXT: Self = Self(1000295002);
}
#[doc = "Provided by [`crate::extensions::ext_pipeline_creation_cache_control`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT: Self = Self(1000297000);
}
#[doc = "Provided by [`crate::extensions::nv_device_diagnostics_config`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV: Self = Self(1000300000);
    pub const DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV: Self = Self(1000300001);
}
#[doc = "Provided by [`crate::extensions::khr_zero_initialize_workgroup_memory`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR: Self =
        Self(1000325000);
}
#[doc = "Provided by [`crate::extensions::nv_fragment_shading_rate_enums`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV: Self = Self(1000326000);
    pub const PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV: Self = Self(1000326001);
    pub const PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV: Self = Self(1000326002);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map2`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT: Self = Self(1000332000);
    pub const PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT: Self = Self(1000332001);
}
#[doc = "Provided by [`crate::extensions::qcom_rotated_copy_commands`]"]
impl StructureType {
    pub const COPY_COMMAND_TRANSFORM_INFO_QCOM: Self = Self(1000333000);
}
#[doc = "Provided by [`crate::extensions::ext_image_robustness`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT: Self = Self(1000335000);
}
#[doc = "Provided by [`crate::extensions::khr_workgroup_memory_explicit_layout`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR: Self =
        Self(1000336000);
}
#[doc = "Provided by [`crate::extensions::khr_copy_commands2`]"]
impl StructureType {
    pub const COPY_BUFFER_INFO_2_KHR: Self = Self(1000337000);
    pub const COPY_IMAGE_INFO_2_KHR: Self = Self(1000337001);
    pub const COPY_BUFFER_TO_IMAGE_INFO_2_KHR: Self = Self(1000337002);
    pub const COPY_IMAGE_TO_BUFFER_INFO_2_KHR: Self = Self(1000337003);
    pub const BLIT_IMAGE_INFO_2_KHR: Self = Self(1000337004);
    pub const RESOLVE_IMAGE_INFO_2_KHR: Self = Self(1000337005);
    pub const BUFFER_COPY_2_KHR: Self = Self(1000337006);
    pub const IMAGE_COPY_2_KHR: Self = Self(1000337007);
    pub const IMAGE_BLIT_2_KHR: Self = Self(1000337008);
    pub const BUFFER_IMAGE_COPY_2_KHR: Self = Self(1000337009);
    pub const IMAGE_RESOLVE_2_KHR: Self = Self(1000337010);
}
#[doc = "Provided by [`crate::extensions::ext_4444_formats`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: Self = Self(1000340000);
}
#[doc = "Provided by [`crate::extensions::ext_directfb_surface`]"]
impl StructureType {
    pub const DIRECTFB_SURFACE_CREATE_INFO_EXT: Self = Self(1000346000);
}
#[doc = "Provided by [`crate::extensions::valve_mutable_descriptor_type`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE: Self = Self(1000351000);
    pub const MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE: Self = Self(1000351002);
}
#[doc = "Provided by [`crate::extensions::khr_multiview`]"]
impl StructureType {
    pub const RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR: Self = Self::RENDER_PASS_MULTIVIEW_CREATE_INFO;
    pub const PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
    pub const PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR: Self =
        Self::PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES;
}
#[doc = "Provided by [`crate::extensions::khr_get_physical_device_properties2`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_FEATURES_2_KHR: Self = Self::PHYSICAL_DEVICE_FEATURES_2;
    pub const PHYSICAL_DEVICE_PROPERTIES_2_KHR: Self = Self::PHYSICAL_DEVICE_PROPERTIES_2;
    pub const FORMAT_PROPERTIES_2_KHR: Self = Self::FORMAT_PROPERTIES_2;
    pub const IMAGE_FORMAT_PROPERTIES_2_KHR: Self = Self::IMAGE_FORMAT_PROPERTIES_2;
    pub const PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR: Self =
        Self::PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2;
    pub const QUEUE_FAMILY_PROPERTIES_2_KHR: Self = Self::QUEUE_FAMILY_PROPERTIES_2;
    pub const PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR: Self =
        Self::PHYSICAL_DEVICE_MEMORY_PROPERTIES_2;
    pub const SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR: Self = Self::SPARSE_IMAGE_FORMAT_PROPERTIES_2;
    pub const PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR: Self =
        Self::PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2;
}
#[doc = "Provided by [`crate::extensions::khr_device_group`]"]
impl StructureType {
    pub const MEMORY_ALLOCATE_FLAGS_INFO_KHR: Self = Self::MEMORY_ALLOCATE_FLAGS_INFO;
    pub const DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR: Self =
        Self::DEVICE_GROUP_RENDER_PASS_BEGIN_INFO;
    pub const DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR: Self =
        Self::DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO;
    pub const DEVICE_GROUP_SUBMIT_INFO_KHR: Self = Self::DEVICE_GROUP_SUBMIT_INFO;
    pub const DEVICE_GROUP_BIND_SPARSE_INFO_KHR: Self = Self::DEVICE_GROUP_BIND_SPARSE_INFO;
    pub const BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR: Self =
        Self::BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO;
    pub const BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR: Self =
        Self::BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_device_group_creation`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR: Self = Self::PHYSICAL_DEVICE_GROUP_PROPERTIES;
    pub const DEVICE_GROUP_DEVICE_CREATE_INFO_KHR: Self = Self::DEVICE_GROUP_DEVICE_CREATE_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_external_memory_capabilities`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR: Self =
        Self::PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO;
    pub const EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR: Self = Self::EXTERNAL_IMAGE_FORMAT_PROPERTIES;
    pub const PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR: Self =
        Self::PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO;
    pub const EXTERNAL_BUFFER_PROPERTIES_KHR: Self = Self::EXTERNAL_BUFFER_PROPERTIES;
    pub const PHYSICAL_DEVICE_ID_PROPERTIES_KHR: Self = Self::PHYSICAL_DEVICE_ID_PROPERTIES;
}
#[doc = "Provided by [`crate::extensions::khr_external_memory`]"]
impl StructureType {
    pub const EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR: Self =
        Self::EXTERNAL_MEMORY_BUFFER_CREATE_INFO;
    pub const EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR: Self = Self::EXTERNAL_MEMORY_IMAGE_CREATE_INFO;
    pub const EXPORT_MEMORY_ALLOCATE_INFO_KHR: Self = Self::EXPORT_MEMORY_ALLOCATE_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_external_semaphore_capabilities`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR: Self =
        Self::PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO;
    pub const EXTERNAL_SEMAPHORE_PROPERTIES_KHR: Self = Self::EXTERNAL_SEMAPHORE_PROPERTIES;
}
#[doc = "Provided by [`crate::extensions::khr_external_semaphore`]"]
impl StructureType {
    pub const EXPORT_SEMAPHORE_CREATE_INFO_KHR: Self = Self::EXPORT_SEMAPHORE_CREATE_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_shader_float16_int8`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
    pub const PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
}
#[doc = "Provided by [`crate::extensions::khr_16bit_storage`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES;
}
#[doc = "Provided by [`crate::extensions::khr_descriptor_update_template`]"]
impl StructureType {
    pub const DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR: Self =
        Self::DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_imageless_framebuffer`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES;
    pub const FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR: Self =
        Self::FRAMEBUFFER_ATTACHMENTS_CREATE_INFO;
    pub const FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR: Self = Self::FRAMEBUFFER_ATTACHMENT_IMAGE_INFO;
    pub const RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR: Self = Self::RENDER_PASS_ATTACHMENT_BEGIN_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_create_renderpass2`]"]
impl StructureType {
    pub const ATTACHMENT_DESCRIPTION_2_KHR: Self = Self::ATTACHMENT_DESCRIPTION_2;
    pub const ATTACHMENT_REFERENCE_2_KHR: Self = Self::ATTACHMENT_REFERENCE_2;
    pub const SUBPASS_DESCRIPTION_2_KHR: Self = Self::SUBPASS_DESCRIPTION_2;
    pub const SUBPASS_DEPENDENCY_2_KHR: Self = Self::SUBPASS_DEPENDENCY_2;
    pub const RENDER_PASS_CREATE_INFO_2_KHR: Self = Self::RENDER_PASS_CREATE_INFO_2;
    pub const SUBPASS_BEGIN_INFO_KHR: Self = Self::SUBPASS_BEGIN_INFO;
    pub const SUBPASS_END_INFO_KHR: Self = Self::SUBPASS_END_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_external_fence_capabilities`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR: Self =
        Self::PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO;
    pub const EXTERNAL_FENCE_PROPERTIES_KHR: Self = Self::EXTERNAL_FENCE_PROPERTIES;
}
#[doc = "Provided by [`crate::extensions::khr_external_fence`]"]
impl StructureType {
    pub const EXPORT_FENCE_CREATE_INFO_KHR: Self = Self::EXPORT_FENCE_CREATE_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_maintenance2`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR: Self =
        Self::PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES;
    pub const RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR: Self =
        Self::RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO;
    pub const IMAGE_VIEW_USAGE_CREATE_INFO_KHR: Self = Self::IMAGE_VIEW_USAGE_CREATE_INFO;
    pub const PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR: Self =
        Self::PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_variable_pointers`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
    pub const PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR;
}
#[doc = "Provided by [`crate::extensions::khr_dedicated_allocation`]"]
impl StructureType {
    pub const MEMORY_DEDICATED_REQUIREMENTS_KHR: Self = Self::MEMORY_DEDICATED_REQUIREMENTS;
    pub const MEMORY_DEDICATED_ALLOCATE_INFO_KHR: Self = Self::MEMORY_DEDICATED_ALLOCATE_INFO;
}
#[doc = "Provided by [`crate::extensions::ext_sampler_filter_minmax`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT: Self =
        Self::PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES;
    pub const SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT: Self =
        Self::SAMPLER_REDUCTION_MODE_CREATE_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_get_memory_requirements2`]"]
impl StructureType {
    pub const BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR: Self = Self::BUFFER_MEMORY_REQUIREMENTS_INFO_2;
    pub const IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR: Self = Self::IMAGE_MEMORY_REQUIREMENTS_INFO_2;
    pub const IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR: Self =
        Self::IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2;
    pub const MEMORY_REQUIREMENTS_2_KHR: Self = Self::MEMORY_REQUIREMENTS_2;
    pub const SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR: Self =
        Self::SPARSE_IMAGE_MEMORY_REQUIREMENTS_2;
}
#[doc = "Provided by [`crate::extensions::khr_image_format_list`]"]
impl StructureType {
    pub const IMAGE_FORMAT_LIST_CREATE_INFO_KHR: Self = Self::IMAGE_FORMAT_LIST_CREATE_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_sampler_ycbcr_conversion`]"]
impl StructureType {
    pub const SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR: Self =
        Self::SAMPLER_YCBCR_CONVERSION_CREATE_INFO;
    pub const SAMPLER_YCBCR_CONVERSION_INFO_KHR: Self = Self::SAMPLER_YCBCR_CONVERSION_INFO;
    pub const BIND_IMAGE_PLANE_MEMORY_INFO_KHR: Self = Self::BIND_IMAGE_PLANE_MEMORY_INFO;
    pub const IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR: Self =
        Self::IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO;
    pub const PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES;
    pub const SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR: Self =
        Self::SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES;
}
#[doc = "Provided by [`crate::extensions::khr_bind_memory2`]"]
impl StructureType {
    pub const BIND_BUFFER_MEMORY_INFO_KHR: Self = Self::BIND_BUFFER_MEMORY_INFO;
    pub const BIND_IMAGE_MEMORY_INFO_KHR: Self = Self::BIND_IMAGE_MEMORY_INFO;
}
#[doc = "Provided by [`crate::extensions::ext_descriptor_indexing`]"]
impl StructureType {
    pub const DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT: Self =
        Self::DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO;
    pub const PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: Self =
        Self::PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES;
    pub const PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: Self =
        Self::PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES;
    pub const DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT: Self =
        Self::DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO;
    pub const DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT: Self =
        Self::DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT;
}
#[doc = "Provided by [`crate::extensions::khr_maintenance3`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR: Self =
        Self::PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES;
    pub const DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR: Self = Self::DESCRIPTOR_SET_LAYOUT_SUPPORT;
}
#[doc = "Provided by [`crate::extensions::khr_shader_subgroup_extended_types`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES;
}
#[doc = "Provided by [`crate::extensions::khr_8bit_storage`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES;
}
#[doc = "Provided by [`crate::extensions::khr_shader_atomic_int64`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES;
}
#[doc = "Provided by [`crate::extensions::khr_driver_properties`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR: Self = Self::PHYSICAL_DEVICE_DRIVER_PROPERTIES;
}
#[doc = "Provided by [`crate::extensions::khr_shader_float_controls`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR: Self =
        Self::PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES;
}
#[doc = "Provided by [`crate::extensions::khr_depth_stencil_resolve`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR: Self =
        Self::PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES;
    pub const SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR: Self =
        Self::SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE;
}
#[doc = "Provided by [`crate::extensions::khr_timeline_semaphore`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES;
    pub const PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR: Self =
        Self::PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES;
    pub const SEMAPHORE_TYPE_CREATE_INFO_KHR: Self = Self::SEMAPHORE_TYPE_CREATE_INFO;
    pub const TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR: Self = Self::TIMELINE_SEMAPHORE_SUBMIT_INFO;
    pub const SEMAPHORE_WAIT_INFO_KHR: Self = Self::SEMAPHORE_WAIT_INFO;
    pub const SEMAPHORE_SIGNAL_INFO_KHR: Self = Self::SEMAPHORE_SIGNAL_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_vulkan_memory_model`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES;
}
#[doc = "Provided by [`crate::extensions::ext_scalar_block_layout`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: Self =
        Self::PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES;
}
#[doc = "Provided by [`crate::extensions::khr_separate_depth_stencil_layouts`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES;
    pub const ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR: Self =
        Self::ATTACHMENT_REFERENCE_STENCIL_LAYOUT;
    pub const ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR: Self =
        Self::ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT;
}
#[doc = "Provided by [`crate::extensions::ext_separate_stencil_usage`]"]
impl StructureType {
    pub const IMAGE_STENCIL_USAGE_CREATE_INFO_EXT: Self = Self::IMAGE_STENCIL_USAGE_CREATE_INFO;
}
#[doc = "Provided by [`crate::extensions::khr_uniform_buffer_standard_layout`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES;
}
#[doc = "Provided by [`crate::extensions::khr_buffer_device_address`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR: Self =
        Self::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES;
    pub const BUFFER_DEVICE_ADDRESS_INFO_KHR: Self = Self::BUFFER_DEVICE_ADDRESS_INFO;
    pub const BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR: Self =
        Self::BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO;
    pub const MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR: Self =
        Self::MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO;
    pub const DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR: Self =
        Self::DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO;
}
#[doc = "Provided by [`crate::extensions::ext_host_query_reset`]"]
impl StructureType {
    pub const PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT: Self =
        Self::PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSystemAllocationScope.html) · Enum"]
#[doc(alias = "VkSystemAllocationScope")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SystemAllocationScope(pub i32);
impl std::fmt::Debug for SystemAllocationScope {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::COMMAND => "COMMAND",
            &Self::OBJECT => "OBJECT",
            &Self::CACHE => "CACHE",
            &Self::DEVICE => "DEVICE",
            &Self::INSTANCE => "INSTANCE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl SystemAllocationScope {
    pub const COMMAND: Self = Self(0);
    pub const OBJECT: Self = Self(1);
    pub const CACHE: Self = Self(2);
    pub const DEVICE: Self = Self(3);
    pub const INSTANCE: Self = Self(4);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkInternalAllocationType.html) · Enum"]
#[doc(alias = "VkInternalAllocationType")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct InternalAllocationType(pub i32);
impl std::fmt::Debug for InternalAllocationType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::EXECUTABLE => "EXECUTABLE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl InternalAllocationType {
    pub const EXECUTABLE: Self = Self(0);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSamplerAddressMode.html) · Enum"]
#[doc(alias = "VkSamplerAddressMode")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SamplerAddressMode(pub i32);
impl std::fmt::Debug for SamplerAddressMode {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::REPEAT => "REPEAT",
            &Self::MIRRORED_REPEAT => "MIRRORED_REPEAT",
            &Self::CLAMP_TO_EDGE => "CLAMP_TO_EDGE",
            &Self::CLAMP_TO_BORDER => "CLAMP_TO_BORDER",
            &Self::MIRROR_CLAMP_TO_EDGE => "MIRROR_CLAMP_TO_EDGE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl SamplerAddressMode {
    pub const REPEAT: Self = Self(0);
    pub const MIRRORED_REPEAT: Self = Self(1);
    pub const CLAMP_TO_EDGE: Self = Self(2);
    pub const CLAMP_TO_BORDER: Self = Self(3);
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl SamplerAddressMode {
    pub const MIRROR_CLAMP_TO_EDGE: Self = Self(4);
}
#[doc = "Provided by [`crate::extensions::khr_sampler_mirror_clamp_to_edge`]"]
impl SamplerAddressMode {
    pub const MIRROR_CLAMP_TO_EDGE_KHR: Self = Self::MIRROR_CLAMP_TO_EDGE;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFilter.html) · Enum"]
#[doc(alias = "VkFilter")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct Filter(pub i32);
impl std::fmt::Debug for Filter {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::NEAREST => "NEAREST",
            &Self::LINEAR => "LINEAR",
            &Self::CUBIC_IMG => "CUBIC_IMG",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl Filter {
    pub const NEAREST: Self = Self(0);
    pub const LINEAR: Self = Self(1);
}
#[doc = "Provided by [`crate::extensions::img_filter_cubic`]"]
impl Filter {
    pub const CUBIC_IMG: Self = Self(1000015000);
}
#[doc = "Provided by [`crate::extensions::ext_filter_cubic`]"]
impl Filter {
    pub const CUBIC_EXT: Self = Self::CUBIC_IMG;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSamplerMipmapMode.html) · Enum"]
#[doc(alias = "VkSamplerMipmapMode")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SamplerMipmapMode(pub i32);
impl std::fmt::Debug for SamplerMipmapMode {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::NEAREST => "NEAREST",
            &Self::LINEAR => "LINEAR",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl SamplerMipmapMode {
    pub const NEAREST: Self = Self(0);
    pub const LINEAR: Self = Self(1);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkVertexInputRate.html) · Enum"]
#[doc(alias = "VkVertexInputRate")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct VertexInputRate(pub i32);
impl std::fmt::Debug for VertexInputRate {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::VERTEX => "VERTEX",
            &Self::INSTANCE => "INSTANCE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl VertexInputRate {
    pub const VERTEX: Self = Self(0);
    pub const INSTANCE: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineStageFlags.html) · Bitmask of [`PipelineStageFlagBits`]"] # [doc (alias = "VkPipelineStageFlags")] # [derive (Default)] # [repr (transparent)] pub struct PipelineStageFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const TOP_OF_PIPE = PipelineStageFlagBits :: TOP_OF_PIPE . 0 ; const DRAW_INDIRECT = PipelineStageFlagBits :: DRAW_INDIRECT . 0 ; const VERTEX_INPUT = PipelineStageFlagBits :: VERTEX_INPUT . 0 ; const VERTEX_SHADER = PipelineStageFlagBits :: VERTEX_SHADER . 0 ; const TESSELLATION_CONTROL_SHADER = PipelineStageFlagBits :: TESSELLATION_CONTROL_SHADER . 0 ; const TESSELLATION_EVALUATION_SHADER = PipelineStageFlagBits :: TESSELLATION_EVALUATION_SHADER . 0 ; const GEOMETRY_SHADER = PipelineStageFlagBits :: GEOMETRY_SHADER . 0 ; const FRAGMENT_SHADER = PipelineStageFlagBits :: FRAGMENT_SHADER . 0 ; const EARLY_FRAGMENT_TESTS = PipelineStageFlagBits :: EARLY_FRAGMENT_TESTS . 0 ; const LATE_FRAGMENT_TESTS = PipelineStageFlagBits :: LATE_FRAGMENT_TESTS . 0 ; const COLOR_ATTACHMENT_OUTPUT = PipelineStageFlagBits :: COLOR_ATTACHMENT_OUTPUT . 0 ; const COMPUTE_SHADER = PipelineStageFlagBits :: COMPUTE_SHADER . 0 ; const TRANSFER = PipelineStageFlagBits :: TRANSFER . 0 ; const BOTTOM_OF_PIPE = PipelineStageFlagBits :: BOTTOM_OF_PIPE . 0 ; const HOST = PipelineStageFlagBits :: HOST . 0 ; const ALL_GRAPHICS = PipelineStageFlagBits :: ALL_GRAPHICS . 0 ; const ALL_COMMANDS = PipelineStageFlagBits :: ALL_COMMANDS . 0 ; const TRANSFORM_FEEDBACK_EXT = PipelineStageFlagBits :: TRANSFORM_FEEDBACK_EXT . 0 ; const CONDITIONAL_RENDERING_EXT = PipelineStageFlagBits :: CONDITIONAL_RENDERING_EXT . 0 ; const ACCELERATION_STRUCTURE_BUILD_KHR = PipelineStageFlagBits :: ACCELERATION_STRUCTURE_BUILD_KHR . 0 ; const RAY_TRACING_SHADER_KHR = PipelineStageFlagBits :: RAY_TRACING_SHADER_KHR . 0 ; const SHADING_RATE_IMAGE_NV = PipelineStageFlagBits :: SHADING_RATE_IMAGE_NV . 0 ; const TASK_SHADER_NV = PipelineStageFlagBits :: TASK_SHADER_NV . 0 ; const MESH_SHADER_NV = PipelineStageFlagBits :: MESH_SHADER_NV . 0 ; const FRAGMENT_DENSITY_PROCESS_EXT = PipelineStageFlagBits :: FRAGMENT_DENSITY_PROCESS_EXT . 0 ; const COMMAND_PREPROCESS_NV = PipelineStageFlagBits :: COMMAND_PREPROCESS_NV . 0 ; const RAY_TRACING_SHADER_NV = PipelineStageFlagBits :: RAY_TRACING_SHADER_NV . 0 ; const ACCELERATION_STRUCTURE_BUILD_NV = PipelineStageFlagBits :: ACCELERATION_STRUCTURE_BUILD_NV . 0 ; const FRAGMENT_SHADING_RATE_ATTACHMENT_KHR = PipelineStageFlagBits :: FRAGMENT_SHADING_RATE_ATTACHMENT_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineStageFlagBits.html) · Bits enum of [`PipelineStageFlags`]"]
#[doc(alias = "VkPipelineStageFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct PipelineStageFlagBits(pub u32);
impl PipelineStageFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> PipelineStageFlags {
        PipelineStageFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for PipelineStageFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::TOP_OF_PIPE => "TOP_OF_PIPE",
            &Self::DRAW_INDIRECT => "DRAW_INDIRECT",
            &Self::VERTEX_INPUT => "VERTEX_INPUT",
            &Self::VERTEX_SHADER => "VERTEX_SHADER",
            &Self::TESSELLATION_CONTROL_SHADER => "TESSELLATION_CONTROL_SHADER",
            &Self::TESSELLATION_EVALUATION_SHADER => "TESSELLATION_EVALUATION_SHADER",
            &Self::GEOMETRY_SHADER => "GEOMETRY_SHADER",
            &Self::FRAGMENT_SHADER => "FRAGMENT_SHADER",
            &Self::EARLY_FRAGMENT_TESTS => "EARLY_FRAGMENT_TESTS",
            &Self::LATE_FRAGMENT_TESTS => "LATE_FRAGMENT_TESTS",
            &Self::COLOR_ATTACHMENT_OUTPUT => "COLOR_ATTACHMENT_OUTPUT",
            &Self::COMPUTE_SHADER => "COMPUTE_SHADER",
            &Self::TRANSFER => "TRANSFER",
            &Self::BOTTOM_OF_PIPE => "BOTTOM_OF_PIPE",
            &Self::HOST => "HOST",
            &Self::ALL_GRAPHICS => "ALL_GRAPHICS",
            &Self::ALL_COMMANDS => "ALL_COMMANDS",
            &Self::TRANSFORM_FEEDBACK_EXT => "TRANSFORM_FEEDBACK_EXT",
            &Self::CONDITIONAL_RENDERING_EXT => "CONDITIONAL_RENDERING_EXT",
            &Self::ACCELERATION_STRUCTURE_BUILD_KHR => "ACCELERATION_STRUCTURE_BUILD_KHR",
            &Self::RAY_TRACING_SHADER_KHR => "RAY_TRACING_SHADER_KHR",
            &Self::SHADING_RATE_IMAGE_NV => "SHADING_RATE_IMAGE_NV",
            &Self::TASK_SHADER_NV => "TASK_SHADER_NV",
            &Self::MESH_SHADER_NV => "MESH_SHADER_NV",
            &Self::FRAGMENT_DENSITY_PROCESS_EXT => "FRAGMENT_DENSITY_PROCESS_EXT",
            &Self::COMMAND_PREPROCESS_NV => "COMMAND_PREPROCESS_NV",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl PipelineStageFlagBits {
    pub const TOP_OF_PIPE: Self = Self(1);
    pub const DRAW_INDIRECT: Self = Self(2);
    pub const VERTEX_INPUT: Self = Self(4);
    pub const VERTEX_SHADER: Self = Self(8);
    pub const TESSELLATION_CONTROL_SHADER: Self = Self(16);
    pub const TESSELLATION_EVALUATION_SHADER: Self = Self(32);
    pub const GEOMETRY_SHADER: Self = Self(64);
    pub const FRAGMENT_SHADER: Self = Self(128);
    pub const EARLY_FRAGMENT_TESTS: Self = Self(256);
    pub const LATE_FRAGMENT_TESTS: Self = Self(512);
    pub const COLOR_ATTACHMENT_OUTPUT: Self = Self(1024);
    pub const COMPUTE_SHADER: Self = Self(2048);
    pub const TRANSFER: Self = Self(4096);
    pub const BOTTOM_OF_PIPE: Self = Self(8192);
    pub const HOST: Self = Self(16384);
    pub const ALL_GRAPHICS: Self = Self(32768);
    pub const ALL_COMMANDS: Self = Self(65536);
}
#[doc = "Provided by [`crate::extensions::ext_transform_feedback`]"]
impl PipelineStageFlagBits {
    pub const TRANSFORM_FEEDBACK_EXT: Self = Self(16777216);
}
#[doc = "Provided by [`crate::extensions::ext_conditional_rendering`]"]
impl PipelineStageFlagBits {
    pub const CONDITIONAL_RENDERING_EXT: Self = Self(262144);
}
#[doc = "Provided by [`crate::extensions::khr_acceleration_structure`]"]
impl PipelineStageFlagBits {
    pub const ACCELERATION_STRUCTURE_BUILD_KHR: Self = Self(33554432);
}
#[doc = "Provided by [`crate::extensions::khr_ray_tracing_pipeline`]"]
impl PipelineStageFlagBits {
    pub const RAY_TRACING_SHADER_KHR: Self = Self(2097152);
}
#[doc = "Provided by [`crate::extensions::nv_shading_rate_image`]"]
impl PipelineStageFlagBits {
    pub const SHADING_RATE_IMAGE_NV: Self = Self(4194304);
}
#[doc = "Provided by [`crate::extensions::nv_mesh_shader`]"]
impl PipelineStageFlagBits {
    pub const TASK_SHADER_NV: Self = Self(524288);
    pub const MESH_SHADER_NV: Self = Self(1048576);
}
#[doc = "Provided by [`crate::extensions::ext_fragment_density_map`]"]
impl PipelineStageFlagBits {
    pub const FRAGMENT_DENSITY_PROCESS_EXT: Self = Self(8388608);
}
#[doc = "Provided by [`crate::extensions::nv_device_generated_commands`]"]
impl PipelineStageFlagBits {
    pub const COMMAND_PREPROCESS_NV: Self = Self(131072);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl PipelineStageFlagBits {
    pub const RAY_TRACING_SHADER_NV: Self = Self::RAY_TRACING_SHADER_KHR;
    pub const ACCELERATION_STRUCTURE_BUILD_NV: Self = Self::ACCELERATION_STRUCTURE_BUILD_KHR;
}
#[doc = "Provided by [`crate::extensions::khr_fragment_shading_rate`]"]
impl PipelineStageFlagBits {
    pub const FRAGMENT_SHADING_RATE_ATTACHMENT_KHR: Self = Self::SHADING_RATE_IMAGE_NV;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageFormatFlags.html) · Bitmask of [`SparseImageFormatFlagBits`]"] # [doc (alias = "VkSparseImageFormatFlags")] # [derive (Default)] # [repr (transparent)] pub struct SparseImageFormatFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const SINGLE_MIPTAIL = SparseImageFormatFlagBits :: SINGLE_MIPTAIL . 0 ; const ALIGNED_MIP_SIZE = SparseImageFormatFlagBits :: ALIGNED_MIP_SIZE . 0 ; const NONSTANDARD_BLOCK_SIZE = SparseImageFormatFlagBits :: NONSTANDARD_BLOCK_SIZE . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageFormatFlagBits.html) · Bits enum of [`SparseImageFormatFlags`]"]
#[doc(alias = "VkSparseImageFormatFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SparseImageFormatFlagBits(pub u32);
impl SparseImageFormatFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> SparseImageFormatFlags {
        SparseImageFormatFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for SparseImageFormatFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::SINGLE_MIPTAIL => "SINGLE_MIPTAIL",
            &Self::ALIGNED_MIP_SIZE => "ALIGNED_MIP_SIZE",
            &Self::NONSTANDARD_BLOCK_SIZE => "NONSTANDARD_BLOCK_SIZE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl SparseImageFormatFlagBits {
    pub const SINGLE_MIPTAIL: Self = Self(1);
    pub const ALIGNED_MIP_SIZE: Self = Self(2);
    pub const NONSTANDARD_BLOCK_SIZE: Self = Self(4);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSampleCountFlags.html) · Bitmask of [`SampleCountFlagBits`]"] # [doc (alias = "VkSampleCountFlags")] # [derive (Default)] # [repr (transparent)] pub struct SampleCountFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const _1 = SampleCountFlagBits :: _1 . 0 ; const _2 = SampleCountFlagBits :: _2 . 0 ; const _4 = SampleCountFlagBits :: _4 . 0 ; const _8 = SampleCountFlagBits :: _8 . 0 ; const _16 = SampleCountFlagBits :: _16 . 0 ; const _32 = SampleCountFlagBits :: _32 . 0 ; const _64 = SampleCountFlagBits :: _64 . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSampleCountFlagBits.html) · Bits enum of [`SampleCountFlags`]"]
#[doc(alias = "VkSampleCountFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SampleCountFlagBits(pub u32);
impl SampleCountFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> SampleCountFlags {
        SampleCountFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for SampleCountFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::_1 => "_1",
            &Self::_2 => "_2",
            &Self::_4 => "_4",
            &Self::_8 => "_8",
            &Self::_16 => "_16",
            &Self::_32 => "_32",
            &Self::_64 => "_64",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl SampleCountFlagBits {
    pub const _1: Self = Self(1);
    pub const _2: Self = Self(2);
    pub const _4: Self = Self(4);
    pub const _8: Self = Self(8);
    pub const _16: Self = Self(16);
    pub const _32: Self = Self(32);
    pub const _64: Self = Self(64);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAttachmentDescriptionFlags.html) · Bitmask of [`AttachmentDescriptionFlagBits`]"] # [doc (alias = "VkAttachmentDescriptionFlags")] # [derive (Default)] # [repr (transparent)] pub struct AttachmentDescriptionFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const MAY_ALIAS = AttachmentDescriptionFlagBits :: MAY_ALIAS . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAttachmentDescriptionFlagBits.html) · Bits enum of [`AttachmentDescriptionFlags`]"]
#[doc(alias = "VkAttachmentDescriptionFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct AttachmentDescriptionFlagBits(pub u32);
impl AttachmentDescriptionFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> AttachmentDescriptionFlags {
        AttachmentDescriptionFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for AttachmentDescriptionFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::MAY_ALIAS => "MAY_ALIAS",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl AttachmentDescriptionFlagBits {
    pub const MAY_ALIAS: Self = Self(1);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorPoolCreateFlags.html) · Bitmask of [`DescriptorPoolCreateFlagBits`]"] # [doc (alias = "VkDescriptorPoolCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct DescriptorPoolCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const FREE_DESCRIPTOR_SET = DescriptorPoolCreateFlagBits :: FREE_DESCRIPTOR_SET . 0 ; const UPDATE_AFTER_BIND = DescriptorPoolCreateFlagBits :: UPDATE_AFTER_BIND . 0 ; const HOST_ONLY_VALVE = DescriptorPoolCreateFlagBits :: HOST_ONLY_VALVE . 0 ; const UPDATE_AFTER_BIND_EXT = DescriptorPoolCreateFlagBits :: UPDATE_AFTER_BIND_EXT . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorPoolCreateFlagBits.html) · Bits enum of [`DescriptorPoolCreateFlags`]"]
#[doc(alias = "VkDescriptorPoolCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct DescriptorPoolCreateFlagBits(pub u32);
impl DescriptorPoolCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> DescriptorPoolCreateFlags {
        DescriptorPoolCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for DescriptorPoolCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::FREE_DESCRIPTOR_SET => "FREE_DESCRIPTOR_SET",
            &Self::UPDATE_AFTER_BIND => "UPDATE_AFTER_BIND",
            &Self::HOST_ONLY_VALVE => "HOST_ONLY_VALVE",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl DescriptorPoolCreateFlagBits {
    pub const FREE_DESCRIPTOR_SET: Self = Self(1);
}
#[doc = "Provided by [`crate::vk1_2`]"]
impl DescriptorPoolCreateFlagBits {
    pub const UPDATE_AFTER_BIND: Self = Self(2);
}
#[doc = "Provided by [`crate::extensions::valve_mutable_descriptor_type`]"]
impl DescriptorPoolCreateFlagBits {
    pub const HOST_ONLY_VALVE: Self = Self(4);
}
#[doc = "Provided by [`crate::extensions::ext_descriptor_indexing`]"]
impl DescriptorPoolCreateFlagBits {
    pub const UPDATE_AFTER_BIND_EXT: Self = Self::UPDATE_AFTER_BIND;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDependencyFlags.html) · Bitmask of [`DependencyFlagBits`]"] # [doc (alias = "VkDependencyFlags")] # [derive (Default)] # [repr (transparent)] pub struct DependencyFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const BY_REGION = DependencyFlagBits :: BY_REGION . 0 ; const DEVICE_GROUP = DependencyFlagBits :: DEVICE_GROUP . 0 ; const VIEW_LOCAL = DependencyFlagBits :: VIEW_LOCAL . 0 ; const VIEW_LOCAL_KHR = DependencyFlagBits :: VIEW_LOCAL_KHR . 0 ; const DEVICE_GROUP_KHR = DependencyFlagBits :: DEVICE_GROUP_KHR . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDependencyFlagBits.html) · Bits enum of [`DependencyFlags`]"]
#[doc(alias = "VkDependencyFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct DependencyFlagBits(pub u32);
impl DependencyFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> DependencyFlags {
        DependencyFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for DependencyFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::BY_REGION => "BY_REGION",
            &Self::DEVICE_GROUP => "DEVICE_GROUP",
            &Self::VIEW_LOCAL => "VIEW_LOCAL",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl DependencyFlagBits {
    pub const BY_REGION: Self = Self(1);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl DependencyFlagBits {
    pub const DEVICE_GROUP: Self = Self(4);
    pub const VIEW_LOCAL: Self = Self(2);
}
#[doc = "Provided by [`crate::extensions::khr_multiview`]"]
impl DependencyFlagBits {
    pub const VIEW_LOCAL_KHR: Self = Self::VIEW_LOCAL;
}
#[doc = "Provided by [`crate::extensions::khr_device_group`]"]
impl DependencyFlagBits {
    pub const DEVICE_GROUP_KHR: Self = Self::DEVICE_GROUP;
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkObjectType.html) · Enum"]
#[doc(alias = "VkObjectType")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ObjectType(pub i32);
impl std::fmt::Debug for ObjectType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::UNKNOWN => "UNKNOWN",
            &Self::INSTANCE => "INSTANCE",
            &Self::PHYSICAL_DEVICE => "PHYSICAL_DEVICE",
            &Self::DEVICE => "DEVICE",
            &Self::QUEUE => "QUEUE",
            &Self::SEMAPHORE => "SEMAPHORE",
            &Self::COMMAND_BUFFER => "COMMAND_BUFFER",
            &Self::FENCE => "FENCE",
            &Self::DEVICE_MEMORY => "DEVICE_MEMORY",
            &Self::BUFFER => "BUFFER",
            &Self::IMAGE => "IMAGE",
            &Self::EVENT => "EVENT",
            &Self::QUERY_POOL => "QUERY_POOL",
            &Self::BUFFER_VIEW => "BUFFER_VIEW",
            &Self::IMAGE_VIEW => "IMAGE_VIEW",
            &Self::SHADER_MODULE => "SHADER_MODULE",
            &Self::PIPELINE_CACHE => "PIPELINE_CACHE",
            &Self::PIPELINE_LAYOUT => "PIPELINE_LAYOUT",
            &Self::RENDER_PASS => "RENDER_PASS",
            &Self::PIPELINE => "PIPELINE",
            &Self::DESCRIPTOR_SET_LAYOUT => "DESCRIPTOR_SET_LAYOUT",
            &Self::SAMPLER => "SAMPLER",
            &Self::DESCRIPTOR_POOL => "DESCRIPTOR_POOL",
            &Self::DESCRIPTOR_SET => "DESCRIPTOR_SET",
            &Self::FRAMEBUFFER => "FRAMEBUFFER",
            &Self::COMMAND_POOL => "COMMAND_POOL",
            &Self::SAMPLER_YCBCR_CONVERSION => "SAMPLER_YCBCR_CONVERSION",
            &Self::DESCRIPTOR_UPDATE_TEMPLATE => "DESCRIPTOR_UPDATE_TEMPLATE",
            &Self::SURFACE_KHR => "SURFACE_KHR",
            &Self::SWAPCHAIN_KHR => "SWAPCHAIN_KHR",
            &Self::DISPLAY_KHR => "DISPLAY_KHR",
            &Self::DISPLAY_MODE_KHR => "DISPLAY_MODE_KHR",
            &Self::DEBUG_REPORT_CALLBACK_EXT => "DEBUG_REPORT_CALLBACK_EXT",
            &Self::DEBUG_UTILS_MESSENGER_EXT => "DEBUG_UTILS_MESSENGER_EXT",
            &Self::ACCELERATION_STRUCTURE_KHR => "ACCELERATION_STRUCTURE_KHR",
            &Self::VALIDATION_CACHE_EXT => "VALIDATION_CACHE_EXT",
            &Self::ACCELERATION_STRUCTURE_NV => "ACCELERATION_STRUCTURE_NV",
            &Self::PERFORMANCE_CONFIGURATION_INTEL => "PERFORMANCE_CONFIGURATION_INTEL",
            &Self::DEFERRED_OPERATION_KHR => "DEFERRED_OPERATION_KHR",
            &Self::INDIRECT_COMMANDS_LAYOUT_NV => "INDIRECT_COMMANDS_LAYOUT_NV",
            &Self::PRIVATE_DATA_SLOT_EXT => "PRIVATE_DATA_SLOT_EXT",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl ObjectType {
    pub const UNKNOWN: Self = Self(0);
    pub const INSTANCE: Self = Self(1);
    pub const PHYSICAL_DEVICE: Self = Self(2);
    pub const DEVICE: Self = Self(3);
    pub const QUEUE: Self = Self(4);
    pub const SEMAPHORE: Self = Self(5);
    pub const COMMAND_BUFFER: Self = Self(6);
    pub const FENCE: Self = Self(7);
    pub const DEVICE_MEMORY: Self = Self(8);
    pub const BUFFER: Self = Self(9);
    pub const IMAGE: Self = Self(10);
    pub const EVENT: Self = Self(11);
    pub const QUERY_POOL: Self = Self(12);
    pub const BUFFER_VIEW: Self = Self(13);
    pub const IMAGE_VIEW: Self = Self(14);
    pub const SHADER_MODULE: Self = Self(15);
    pub const PIPELINE_CACHE: Self = Self(16);
    pub const PIPELINE_LAYOUT: Self = Self(17);
    pub const RENDER_PASS: Self = Self(18);
    pub const PIPELINE: Self = Self(19);
    pub const DESCRIPTOR_SET_LAYOUT: Self = Self(20);
    pub const SAMPLER: Self = Self(21);
    pub const DESCRIPTOR_POOL: Self = Self(22);
    pub const DESCRIPTOR_SET: Self = Self(23);
    pub const FRAMEBUFFER: Self = Self(24);
    pub const COMMAND_POOL: Self = Self(25);
}
#[doc = "Provided by [`crate::vk1_1`]"]
impl ObjectType {
    pub const SAMPLER_YCBCR_CONVERSION: Self = Self(1000156000);
    pub const DESCRIPTOR_UPDATE_TEMPLATE: Self = Self(1000085000);
}
#[doc = "Provided by [`crate::extensions::khr_surface`]"]
impl ObjectType {
    pub const SURFACE_KHR: Self = Self(1000000000);
}
#[doc = "Provided by [`crate::extensions::khr_swapchain`]"]
impl ObjectType {
    pub const SWAPCHAIN_KHR: Self = Self(1000001000);
}
#[doc = "Provided by [`crate::extensions::khr_display`]"]
impl ObjectType {
    pub const DISPLAY_KHR: Self = Self(1000002000);
    pub const DISPLAY_MODE_KHR: Self = Self(1000002001);
}
#[doc = "Provided by [`crate::extensions::ext_debug_report`]"]
impl ObjectType {
    pub const DEBUG_REPORT_CALLBACK_EXT: Self = Self(1000011000);
}
#[doc = "Provided by [`crate::extensions::ext_debug_utils`]"]
impl ObjectType {
    pub const DEBUG_UTILS_MESSENGER_EXT: Self = Self(1000128000);
}
#[doc = "Provided by [`crate::extensions::khr_acceleration_structure`]"]
impl ObjectType {
    pub const ACCELERATION_STRUCTURE_KHR: Self = Self(1000150000);
}
#[doc = "Provided by [`crate::extensions::ext_validation_cache`]"]
impl ObjectType {
    pub const VALIDATION_CACHE_EXT: Self = Self(1000160000);
}
#[doc = "Provided by [`crate::extensions::nv_ray_tracing`]"]
impl ObjectType {
    pub const ACCELERATION_STRUCTURE_NV: Self = Self(1000165000);
}
#[doc = "Provided by [`crate::extensions::intel_performance_query`]"]
impl ObjectType {
    pub const PERFORMANCE_CONFIGURATION_INTEL: Self = Self(1000210000);
}
#[doc = "Provided by [`crate::extensions::khr_deferred_host_operations`]"]
impl ObjectType {
    pub const DEFERRED_OPERATION_KHR: Self = Self(1000268000);
}
#[doc = "Provided by [`crate::extensions::nv_device_generated_commands`]"]
impl ObjectType {
    pub const INDIRECT_COMMANDS_LAYOUT_NV: Self = Self(1000277000);
}
#[doc = "Provided by [`crate::extensions::ext_private_data`]"]
impl ObjectType {
    pub const PRIVATE_DATA_SLOT_EXT: Self = Self(1000295000);
}
#[doc = "Provided by [`crate::extensions::khr_descriptor_update_template`]"]
impl ObjectType {
    pub const DESCRIPTOR_UPDATE_TEMPLATE_KHR: Self = Self::DESCRIPTOR_UPDATE_TEMPLATE;
}
#[doc = "Provided by [`crate::extensions::khr_sampler_ycbcr_conversion`]"]
impl ObjectType {
    pub const SAMPLER_YCBCR_CONVERSION_KHR: Self = Self::SAMPLER_YCBCR_CONVERSION;
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubpassDescriptionFlags.html) · Bitmask of [`SubpassDescriptionFlagBits`]"] # [doc (alias = "VkSubpassDescriptionFlags")] # [derive (Default)] # [repr (transparent)] pub struct SubpassDescriptionFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; const PER_VIEW_ATTRIBUTES_NVX = SubpassDescriptionFlagBits :: PER_VIEW_ATTRIBUTES_NVX . 0 ; const PER_VIEW_POSITION_X_ONLY_NVX = SubpassDescriptionFlagBits :: PER_VIEW_POSITION_X_ONLY_NVX . 0 ; const FRAGMENT_REGION_QCOM = SubpassDescriptionFlagBits :: FRAGMENT_REGION_QCOM . 0 ; const SHADER_RESOLVE_QCOM = SubpassDescriptionFlagBits :: SHADER_RESOLVE_QCOM . 0 ; } }
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubpassDescriptionFlagBits.html) · Bits enum of [`SubpassDescriptionFlags`]"]
#[doc(alias = "VkSubpassDescriptionFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct SubpassDescriptionFlagBits(pub u32);
impl SubpassDescriptionFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> SubpassDescriptionFlags {
        SubpassDescriptionFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for SubpassDescriptionFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::PER_VIEW_ATTRIBUTES_NVX => "PER_VIEW_ATTRIBUTES_NVX",
            &Self::PER_VIEW_POSITION_X_ONLY_NVX => "PER_VIEW_POSITION_X_ONLY_NVX",
            &Self::FRAGMENT_REGION_QCOM => "FRAGMENT_REGION_QCOM",
            &Self::SHADER_RESOLVE_QCOM => "SHADER_RESOLVE_QCOM",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::extensions::nvx_multiview_per_view_attributes`]"]
impl SubpassDescriptionFlagBits {
    pub const PER_VIEW_ATTRIBUTES_NVX: Self = Self(1);
    pub const PER_VIEW_POSITION_X_ONLY_NVX: Self = Self(2);
}
#[doc = "Provided by [`crate::extensions::qcom_render_pass_shader_resolve`]"]
impl SubpassDescriptionFlagBits {
    pub const FRAGMENT_REGION_QCOM: Self = Self(4);
    pub const SHADER_RESOLVE_QCOM: Self = Self(8);
}
bitflags::bitflags! { # [doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkShaderModuleCreateFlags.html) · Bitmask of [`ShaderModuleCreateFlagBits`]"] # [doc (alias = "VkShaderModuleCreateFlags")] # [derive (Default)] # [repr (transparent)] pub struct ShaderModuleCreateFlags : u32 { # [cfg (empty_bitflag_workaround)] const EMPTY_BITFLAG_WORKAROUND = 0 ; } }
#[doc = "<s>Vulkan Manual Page</s> · Bits enum of [`ShaderModuleCreateFlags`]"]
#[doc(alias = "VkShaderModuleCreateFlagBits")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ShaderModuleCreateFlagBits(pub u32);
impl ShaderModuleCreateFlagBits {
    #[inline]
    #[doc = "Converts this enum variant to the corresponding bitmask"]
    pub const fn bitmask(&self) -> ShaderModuleCreateFlags {
        ShaderModuleCreateFlags::from_bits_truncate(self.0)
    }
}
impl std::fmt::Debug for ShaderModuleCreateFlagBits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            _ => "(unknown variant)",
        })
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkVendorId.html) · Enum"]
#[doc(alias = "VkVendorId")]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
#[repr(transparent)]
pub struct VendorId(pub i32);
impl std::fmt::Debug for VendorId {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.write_str(match self {
            &Self::VIV => "VIV",
            &Self::VSI => "VSI",
            &Self::KAZAN => "KAZAN",
            &Self::CODEPLAY => "CODEPLAY",
            &Self::MESA => "MESA",
            &Self::POCL => "POCL",
            _ => "(unknown variant)",
        })
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl VendorId {
    pub const VIV: Self = Self(65537);
    pub const VSI: Self = Self(65538);
    pub const KAZAN: Self = Self(65539);
    pub const CODEPLAY: Self = Self(65540);
    pub const MESA: Self = Self(65541);
    pub const POCL: Self = Self(65542);
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateInstance.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateInstance = unsafe extern "system" fn(
    p_create_info: *const crate::vk1_0::InstanceCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_instance: *mut crate::vk1_0::Instance,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyInstance.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyInstance = unsafe extern "system" fn(
    instance: crate::vk1_0::Instance,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumeratePhysicalDevices.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkEnumeratePhysicalDevices = unsafe extern "system" fn(
    instance: crate::vk1_0::Instance,
    p_physical_device_count: *mut u32,
    p_physical_devices: *mut crate::vk1_0::PhysicalDevice,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceProcAddr.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetDeviceProcAddr =
    unsafe extern "system" fn(
        device: crate::vk1_0::Device,
        p_name: *const std::os::raw::c_char,
    ) -> Option<crate::vk1_0::PFN_vkVoidFunction>;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetInstanceProcAddr.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetInstanceProcAddr =
    unsafe extern "system" fn(
        instance: crate::vk1_0::Instance,
        p_name: *const std::os::raw::c_char,
    ) -> Option<crate::vk1_0::PFN_vkVoidFunction>;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetPhysicalDeviceProperties = unsafe extern "system" fn(
    physical_device: crate::vk1_0::PhysicalDevice,
    p_properties: *mut crate::vk1_0::PhysicalDeviceProperties,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetPhysicalDeviceQueueFamilyProperties = unsafe extern "system" fn(
    physical_device: crate::vk1_0::PhysicalDevice,
    p_queue_family_property_count: *mut u32,
    p_queue_family_properties: *mut crate::vk1_0::QueueFamilyProperties,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceMemoryProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetPhysicalDeviceMemoryProperties = unsafe extern "system" fn(
    physical_device: crate::vk1_0::PhysicalDevice,
    p_memory_properties: *mut crate::vk1_0::PhysicalDeviceMemoryProperties,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceFeatures.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetPhysicalDeviceFeatures = unsafe extern "system" fn(
    physical_device: crate::vk1_0::PhysicalDevice,
    p_features: *mut crate::vk1_0::PhysicalDeviceFeatures,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceFormatProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetPhysicalDeviceFormatProperties = unsafe extern "system" fn(
    physical_device: crate::vk1_0::PhysicalDevice,
    format: crate::vk1_0::Format,
    p_format_properties: *mut crate::vk1_0::FormatProperties,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceImageFormatProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetPhysicalDeviceImageFormatProperties =
    unsafe extern "system" fn(
        physical_device: crate::vk1_0::PhysicalDevice,
        format: crate::vk1_0::Format,
        _type: crate::vk1_0::ImageType,
        tiling: crate::vk1_0::ImageTiling,
        usage: crate::vk1_0::ImageUsageFlags,
        flags: crate::vk1_0::ImageCreateFlags,
        p_image_format_properties: *mut crate::vk1_0::ImageFormatProperties,
    ) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDevice.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateDevice = unsafe extern "system" fn(
    physical_device: crate::vk1_0::PhysicalDevice,
    p_create_info: *const crate::vk1_0::DeviceCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_device: *mut crate::vk1_0::Device,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDevice.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyDevice = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateInstanceLayerProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkEnumerateInstanceLayerProperties = unsafe extern "system" fn(
    p_property_count: *mut u32,
    p_properties: *mut crate::vk1_0::LayerProperties,
)
    -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateInstanceExtensionProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkEnumerateInstanceExtensionProperties =
    unsafe extern "system" fn(
        p_layer_name: *const std::os::raw::c_char,
        p_property_count: *mut u32,
        p_properties: *mut crate::vk1_0::ExtensionProperties,
    ) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateDeviceLayerProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkEnumerateDeviceLayerProperties = unsafe extern "system" fn(
    physical_device: crate::vk1_0::PhysicalDevice,
    p_property_count: *mut u32,
    p_properties: *mut crate::vk1_0::LayerProperties,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateDeviceExtensionProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkEnumerateDeviceExtensionProperties =
    unsafe extern "system" fn(
        physical_device: crate::vk1_0::PhysicalDevice,
        p_layer_name: *const std::os::raw::c_char,
        p_property_count: *mut u32,
        p_properties: *mut crate::vk1_0::ExtensionProperties,
    ) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceQueue.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetDeviceQueue = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    queue_family_index: u32,
    queue_index: u32,
    p_queue: *mut crate::vk1_0::Queue,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueSubmit.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkQueueSubmit = unsafe extern "system" fn(
    queue: crate::vk1_0::Queue,
    submit_count: u32,
    p_submits: *const crate::vk1_0::SubmitInfo,
    fence: crate::vk1_0::Fence,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueWaitIdle.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkQueueWaitIdle =
    unsafe extern "system" fn(queue: crate::vk1_0::Queue) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDeviceWaitIdle.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDeviceWaitIdle =
    unsafe extern "system" fn(device: crate::vk1_0::Device) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkAllocateMemory.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkAllocateMemory = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_allocate_info: *const crate::vk1_0::MemoryAllocateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_memory: *mut crate::vk1_0::DeviceMemory,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFreeMemory.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkFreeMemory = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    memory: crate::vk1_0::DeviceMemory,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkMapMemory.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkMapMemory = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    memory: crate::vk1_0::DeviceMemory,
    offset: crate::vk1_0::DeviceSize,
    size: crate::vk1_0::DeviceSize,
    flags: crate::vk1_0::MemoryMapFlags,
    pp_data: *mut *mut std::ffi::c_void,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkUnmapMemory.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkUnmapMemory = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    memory: crate::vk1_0::DeviceMemory,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFlushMappedMemoryRanges.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkFlushMappedMemoryRanges = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    memory_range_count: u32,
    p_memory_ranges: *const crate::vk1_0::MappedMemoryRange,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkInvalidateMappedMemoryRanges.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkInvalidateMappedMemoryRanges = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    memory_range_count: u32,
    p_memory_ranges: *const crate::vk1_0::MappedMemoryRange,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceMemoryCommitment.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetDeviceMemoryCommitment = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    memory: crate::vk1_0::DeviceMemory,
    p_committed_memory_in_bytes: *mut crate::vk1_0::DeviceSize,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferMemoryRequirements.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetBufferMemoryRequirements = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    buffer: crate::vk1_0::Buffer,
    p_memory_requirements: *mut crate::vk1_0::MemoryRequirements,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBindBufferMemory.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkBindBufferMemory = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    buffer: crate::vk1_0::Buffer,
    memory: crate::vk1_0::DeviceMemory,
    memory_offset: crate::vk1_0::DeviceSize,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageMemoryRequirements.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetImageMemoryRequirements = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    image: crate::vk1_0::Image,
    p_memory_requirements: *mut crate::vk1_0::MemoryRequirements,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBindImageMemory.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkBindImageMemory = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    image: crate::vk1_0::Image,
    memory: crate::vk1_0::DeviceMemory,
    memory_offset: crate::vk1_0::DeviceSize,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageSparseMemoryRequirements.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetImageSparseMemoryRequirements = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    image: crate::vk1_0::Image,
    p_sparse_memory_requirement_count: *mut u32,
    p_sparse_memory_requirements: *mut crate::vk1_0::SparseImageMemoryRequirements,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetPhysicalDeviceSparseImageFormatProperties = unsafe extern "system" fn(
    physical_device: crate::vk1_0::PhysicalDevice,
    format: crate::vk1_0::Format,
    _type: crate::vk1_0::ImageType,
    samples: crate::vk1_0::SampleCountFlagBits,
    usage: crate::vk1_0::ImageUsageFlags,
    tiling: crate::vk1_0::ImageTiling,
    p_property_count: *mut u32,
    p_properties: *mut crate::vk1_0::SparseImageFormatProperties,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueBindSparse.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkQueueBindSparse = unsafe extern "system" fn(
    queue: crate::vk1_0::Queue,
    bind_info_count: u32,
    p_bind_info: *const crate::vk1_0::BindSparseInfo,
    fence: crate::vk1_0::Fence,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateFence.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateFence = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::FenceCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_fence: *mut crate::vk1_0::Fence,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyFence.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyFence = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    fence: crate::vk1_0::Fence,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetFences.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkResetFences = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    fence_count: u32,
    p_fences: *const crate::vk1_0::Fence,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetFenceStatus.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetFenceStatus = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    fence: crate::vk1_0::Fence,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkWaitForFences.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkWaitForFences = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    fence_count: u32,
    p_fences: *const crate::vk1_0::Fence,
    wait_all: crate::vk1_0::Bool32,
    timeout: u64,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateSemaphore.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateSemaphore = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::SemaphoreCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_semaphore: *mut crate::vk1_0::Semaphore,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroySemaphore.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroySemaphore = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    semaphore: crate::vk1_0::Semaphore,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateEvent.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateEvent = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::EventCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_event: *mut crate::vk1_0::Event,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyEvent.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyEvent = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    event: crate::vk1_0::Event,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetEventStatus.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetEventStatus = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    event: crate::vk1_0::Event,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkSetEvent.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkSetEvent = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    event: crate::vk1_0::Event,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetEvent.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkResetEvent = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    event: crate::vk1_0::Event,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateQueryPool.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateQueryPool = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::QueryPoolCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_query_pool: *mut crate::vk1_0::QueryPool,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyQueryPool.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyQueryPool = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    query_pool: crate::vk1_0::QueryPool,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetQueryPoolResults.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetQueryPoolResults = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    query_pool: crate::vk1_0::QueryPool,
    first_query: u32,
    query_count: u32,
    data_size: usize,
    p_data: *mut std::ffi::c_void,
    stride: crate::vk1_0::DeviceSize,
    flags: crate::vk1_0::QueryResultFlags,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateBuffer = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::BufferCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_buffer: *mut crate::vk1_0::Buffer,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyBuffer = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    buffer: crate::vk1_0::Buffer,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateBufferView.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateBufferView = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::BufferViewCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_view: *mut crate::vk1_0::BufferView,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyBufferView.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyBufferView = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    buffer_view: crate::vk1_0::BufferView,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateImage.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateImage = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::ImageCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_image: *mut crate::vk1_0::Image,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyImage.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyImage = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    image: crate::vk1_0::Image,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageSubresourceLayout.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetImageSubresourceLayout = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    image: crate::vk1_0::Image,
    p_subresource: *const crate::vk1_0::ImageSubresource,
    p_layout: *mut crate::vk1_0::SubresourceLayout,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateImageView.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateImageView = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::ImageViewCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_view: *mut crate::vk1_0::ImageView,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyImageView.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyImageView = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    image_view: crate::vk1_0::ImageView,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateShaderModule.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateShaderModule = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::ShaderModuleCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_shader_module: *mut crate::vk1_0::ShaderModule,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyShaderModule.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyShaderModule = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    shader_module: crate::vk1_0::ShaderModule,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreatePipelineCache.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreatePipelineCache = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::PipelineCacheCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_pipeline_cache: *mut crate::vk1_0::PipelineCache,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyPipelineCache.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyPipelineCache = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    pipeline_cache: crate::vk1_0::PipelineCache,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPipelineCacheData.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetPipelineCacheData = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    pipeline_cache: crate::vk1_0::PipelineCache,
    p_data_size: *mut usize,
    p_data: *mut std::ffi::c_void,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkMergePipelineCaches.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkMergePipelineCaches = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    dst_cache: crate::vk1_0::PipelineCache,
    src_cache_count: u32,
    p_src_caches: *const crate::vk1_0::PipelineCache,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateGraphicsPipelines.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateGraphicsPipelines = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    pipeline_cache: crate::vk1_0::PipelineCache,
    create_info_count: u32,
    p_create_infos: *const crate::vk1_0::GraphicsPipelineCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_pipelines: *mut crate::vk1_0::Pipeline,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateComputePipelines.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateComputePipelines = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    pipeline_cache: crate::vk1_0::PipelineCache,
    create_info_count: u32,
    p_create_infos: *const crate::vk1_0::ComputePipelineCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_pipelines: *mut crate::vk1_0::Pipeline,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyPipeline.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyPipeline = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    pipeline: crate::vk1_0::Pipeline,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreatePipelineLayout.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreatePipelineLayout = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::PipelineLayoutCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_pipeline_layout: *mut crate::vk1_0::PipelineLayout,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyPipelineLayout.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyPipelineLayout = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    pipeline_layout: crate::vk1_0::PipelineLayout,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateSampler.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateSampler = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::SamplerCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_sampler: *mut crate::vk1_0::Sampler,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroySampler.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroySampler = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    sampler: crate::vk1_0::Sampler,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDescriptorSetLayout.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateDescriptorSetLayout = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::DescriptorSetLayoutCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_set_layout: *mut crate::vk1_0::DescriptorSetLayout,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDescriptorSetLayout.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyDescriptorSetLayout = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    descriptor_set_layout: crate::vk1_0::DescriptorSetLayout,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDescriptorPool.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateDescriptorPool = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::DescriptorPoolCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_descriptor_pool: *mut crate::vk1_0::DescriptorPool,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDescriptorPool.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyDescriptorPool = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    descriptor_pool: crate::vk1_0::DescriptorPool,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetDescriptorPool.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkResetDescriptorPool = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    descriptor_pool: crate::vk1_0::DescriptorPool,
    flags: crate::vk1_0::DescriptorPoolResetFlags,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkAllocateDescriptorSets.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkAllocateDescriptorSets = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_allocate_info: *const crate::vk1_0::DescriptorSetAllocateInfo,
    p_descriptor_sets: *mut crate::vk1_0::DescriptorSet,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFreeDescriptorSets.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkFreeDescriptorSets = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    descriptor_pool: crate::vk1_0::DescriptorPool,
    descriptor_set_count: u32,
    p_descriptor_sets: *const crate::vk1_0::DescriptorSet,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkUpdateDescriptorSets.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkUpdateDescriptorSets = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    descriptor_write_count: u32,
    p_descriptor_writes: *const crate::vk1_0::WriteDescriptorSet,
    descriptor_copy_count: u32,
    p_descriptor_copies: *const crate::vk1_0::CopyDescriptorSet,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateFramebuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateFramebuffer = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::FramebufferCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_framebuffer: *mut crate::vk1_0::Framebuffer,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyFramebuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyFramebuffer = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    framebuffer: crate::vk1_0::Framebuffer,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateRenderPass.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateRenderPass = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::RenderPassCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_render_pass: *mut crate::vk1_0::RenderPass,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyRenderPass.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyRenderPass = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    render_pass: crate::vk1_0::RenderPass,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetRenderAreaGranularity.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkGetRenderAreaGranularity = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    render_pass: crate::vk1_0::RenderPass,
    p_granularity: *mut crate::vk1_0::Extent2D,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateCommandPool.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCreateCommandPool = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_create_info: *const crate::vk1_0::CommandPoolCreateInfo,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
    p_command_pool: *mut crate::vk1_0::CommandPool,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyCommandPool.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkDestroyCommandPool = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    command_pool: crate::vk1_0::CommandPool,
    p_allocator: *const crate::vk1_0::AllocationCallbacks,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetCommandPool.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkResetCommandPool = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    command_pool: crate::vk1_0::CommandPool,
    flags: crate::vk1_0::CommandPoolResetFlags,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkAllocateCommandBuffers.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkAllocateCommandBuffers = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    p_allocate_info: *const crate::vk1_0::CommandBufferAllocateInfo,
    p_command_buffers: *mut crate::vk1_0::CommandBuffer,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFreeCommandBuffers.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkFreeCommandBuffers = unsafe extern "system" fn(
    device: crate::vk1_0::Device,
    command_pool: crate::vk1_0::CommandPool,
    command_buffer_count: u32,
    p_command_buffers: *const crate::vk1_0::CommandBuffer,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBeginCommandBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkBeginCommandBuffer = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    p_begin_info: *const crate::vk1_0::CommandBufferBeginInfo,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEndCommandBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkEndCommandBuffer =
    unsafe extern "system" fn(command_buffer: crate::vk1_0::CommandBuffer) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetCommandBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkResetCommandBuffer = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    flags: crate::vk1_0::CommandBufferResetFlags,
) -> crate::vk1_0::Result;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBindPipeline.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdBindPipeline = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
    pipeline: crate::vk1_0::Pipeline,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetViewport.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetViewport = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    first_viewport: u32,
    viewport_count: u32,
    p_viewports: *const crate::vk1_0::Viewport,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetScissor.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetScissor = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    first_scissor: u32,
    scissor_count: u32,
    p_scissors: *const crate::vk1_0::Rect2D,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetLineWidth.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetLineWidth = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    line_width: std::os::raw::c_float,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetDepthBias.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetDepthBias = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    depth_bias_constant_factor: std::os::raw::c_float,
    depth_bias_clamp: std::os::raw::c_float,
    depth_bias_slope_factor: std::os::raw::c_float,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetBlendConstants.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetBlendConstants = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    blend_constants: [std::os::raw::c_float; 4],
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetDepthBounds.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetDepthBounds = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    min_depth_bounds: std::os::raw::c_float,
    max_depth_bounds: std::os::raw::c_float,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetStencilCompareMask.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetStencilCompareMask = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    face_mask: crate::vk1_0::StencilFaceFlags,
    compare_mask: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetStencilWriteMask.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetStencilWriteMask = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    face_mask: crate::vk1_0::StencilFaceFlags,
    write_mask: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetStencilReference.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetStencilReference = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    face_mask: crate::vk1_0::StencilFaceFlags,
    reference: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBindDescriptorSets.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdBindDescriptorSets = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
    layout: crate::vk1_0::PipelineLayout,
    first_set: u32,
    descriptor_set_count: u32,
    p_descriptor_sets: *const crate::vk1_0::DescriptorSet,
    dynamic_offset_count: u32,
    p_dynamic_offsets: *const u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBindIndexBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdBindIndexBuffer = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    buffer: crate::vk1_0::Buffer,
    offset: crate::vk1_0::DeviceSize,
    index_type: crate::vk1_0::IndexType,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBindVertexBuffers.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdBindVertexBuffers = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    first_binding: u32,
    binding_count: u32,
    p_buffers: *const crate::vk1_0::Buffer,
    p_offsets: *const crate::vk1_0::DeviceSize,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDraw.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdDraw = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    vertex_count: u32,
    instance_count: u32,
    first_vertex: u32,
    first_instance: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawIndexed.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdDrawIndexed = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    index_count: u32,
    instance_count: u32,
    first_index: u32,
    vertex_offset: i32,
    first_instance: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawIndirect.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdDrawIndirect = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    buffer: crate::vk1_0::Buffer,
    offset: crate::vk1_0::DeviceSize,
    draw_count: u32,
    stride: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawIndexedIndirect.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdDrawIndexedIndirect = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    buffer: crate::vk1_0::Buffer,
    offset: crate::vk1_0::DeviceSize,
    draw_count: u32,
    stride: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDispatch.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdDispatch = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    group_count_x: u32,
    group_count_y: u32,
    group_count_z: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDispatchIndirect.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdDispatchIndirect = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    buffer: crate::vk1_0::Buffer,
    offset: crate::vk1_0::DeviceSize,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdCopyBuffer = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    src_buffer: crate::vk1_0::Buffer,
    dst_buffer: crate::vk1_0::Buffer,
    region_count: u32,
    p_regions: *const crate::vk1_0::BufferCopy,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyImage.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdCopyImage = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    src_image: crate::vk1_0::Image,
    src_image_layout: crate::vk1_0::ImageLayout,
    dst_image: crate::vk1_0::Image,
    dst_image_layout: crate::vk1_0::ImageLayout,
    region_count: u32,
    p_regions: *const crate::vk1_0::ImageCopy,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBlitImage.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdBlitImage = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    src_image: crate::vk1_0::Image,
    src_image_layout: crate::vk1_0::ImageLayout,
    dst_image: crate::vk1_0::Image,
    dst_image_layout: crate::vk1_0::ImageLayout,
    region_count: u32,
    p_regions: *const crate::vk1_0::ImageBlit,
    filter: crate::vk1_0::Filter,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyBufferToImage.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdCopyBufferToImage = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    src_buffer: crate::vk1_0::Buffer,
    dst_image: crate::vk1_0::Image,
    dst_image_layout: crate::vk1_0::ImageLayout,
    region_count: u32,
    p_regions: *const crate::vk1_0::BufferImageCopy,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyImageToBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdCopyImageToBuffer = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    src_image: crate::vk1_0::Image,
    src_image_layout: crate::vk1_0::ImageLayout,
    dst_buffer: crate::vk1_0::Buffer,
    region_count: u32,
    p_regions: *const crate::vk1_0::BufferImageCopy,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdUpdateBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdUpdateBuffer = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    dst_buffer: crate::vk1_0::Buffer,
    dst_offset: crate::vk1_0::DeviceSize,
    data_size: crate::vk1_0::DeviceSize,
    p_data: *const std::ffi::c_void,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdFillBuffer.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdFillBuffer = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    dst_buffer: crate::vk1_0::Buffer,
    dst_offset: crate::vk1_0::DeviceSize,
    size: crate::vk1_0::DeviceSize,
    data: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdClearColorImage.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdClearColorImage = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    image: crate::vk1_0::Image,
    image_layout: crate::vk1_0::ImageLayout,
    p_color: *const crate::vk1_0::ClearColorValue,
    range_count: u32,
    p_ranges: *const crate::vk1_0::ImageSubresourceRange,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdClearDepthStencilImage.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdClearDepthStencilImage = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    image: crate::vk1_0::Image,
    image_layout: crate::vk1_0::ImageLayout,
    p_depth_stencil: *const crate::vk1_0::ClearDepthStencilValue,
    range_count: u32,
    p_ranges: *const crate::vk1_0::ImageSubresourceRange,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdClearAttachments.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdClearAttachments = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    attachment_count: u32,
    p_attachments: *const crate::vk1_0::ClearAttachment,
    rect_count: u32,
    p_rects: *const crate::vk1_0::ClearRect,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdResolveImage.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdResolveImage = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    src_image: crate::vk1_0::Image,
    src_image_layout: crate::vk1_0::ImageLayout,
    dst_image: crate::vk1_0::Image,
    dst_image_layout: crate::vk1_0::ImageLayout,
    region_count: u32,
    p_regions: *const crate::vk1_0::ImageResolve,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetEvent.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdSetEvent = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    event: crate::vk1_0::Event,
    stage_mask: crate::vk1_0::PipelineStageFlags,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdResetEvent.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdResetEvent = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    event: crate::vk1_0::Event,
    stage_mask: crate::vk1_0::PipelineStageFlags,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdWaitEvents.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdWaitEvents = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    event_count: u32,
    p_events: *const crate::vk1_0::Event,
    src_stage_mask: crate::vk1_0::PipelineStageFlags,
    dst_stage_mask: crate::vk1_0::PipelineStageFlags,
    memory_barrier_count: u32,
    p_memory_barriers: *const crate::vk1_0::MemoryBarrier,
    buffer_memory_barrier_count: u32,
    p_buffer_memory_barriers: *const crate::vk1_0::BufferMemoryBarrier,
    image_memory_barrier_count: u32,
    p_image_memory_barriers: *const crate::vk1_0::ImageMemoryBarrier,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdPipelineBarrier.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdPipelineBarrier = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    src_stage_mask: crate::vk1_0::PipelineStageFlags,
    dst_stage_mask: crate::vk1_0::PipelineStageFlags,
    dependency_flags: crate::vk1_0::DependencyFlags,
    memory_barrier_count: u32,
    p_memory_barriers: *const crate::vk1_0::MemoryBarrier,
    buffer_memory_barrier_count: u32,
    p_buffer_memory_barriers: *const crate::vk1_0::BufferMemoryBarrier,
    image_memory_barrier_count: u32,
    p_image_memory_barriers: *const crate::vk1_0::ImageMemoryBarrier,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBeginQuery.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdBeginQuery = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    query_pool: crate::vk1_0::QueryPool,
    query: u32,
    flags: crate::vk1_0::QueryControlFlags,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdEndQuery.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdEndQuery = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    query_pool: crate::vk1_0::QueryPool,
    query: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdResetQueryPool.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdResetQueryPool = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    query_pool: crate::vk1_0::QueryPool,
    first_query: u32,
    query_count: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdWriteTimestamp.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdWriteTimestamp = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    pipeline_stage: crate::vk1_0::PipelineStageFlagBits,
    query_pool: crate::vk1_0::QueryPool,
    query: u32,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyQueryPoolResults.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdCopyQueryPoolResults = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    query_pool: crate::vk1_0::QueryPool,
    first_query: u32,
    query_count: u32,
    dst_buffer: crate::vk1_0::Buffer,
    dst_offset: crate::vk1_0::DeviceSize,
    stride: crate::vk1_0::DeviceSize,
    flags: crate::vk1_0::QueryResultFlags,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdPushConstants.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdPushConstants = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    layout: crate::vk1_0::PipelineLayout,
    stage_flags: crate::vk1_0::ShaderStageFlags,
    offset: u32,
    size: u32,
    p_values: *const std::ffi::c_void,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBeginRenderPass.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdBeginRenderPass = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    p_render_pass_begin: *const crate::vk1_0::RenderPassBeginInfo,
    contents: crate::vk1_0::SubpassContents,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdNextSubpass.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdNextSubpass = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    contents: crate::vk1_0::SubpassContents,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdEndRenderPass.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdEndRenderPass =
    unsafe extern "system" fn(command_buffer: crate::vk1_0::CommandBuffer) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdExecuteCommands.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkCmdExecuteCommands = unsafe extern "system" fn(
    command_buffer: crate::vk1_0::CommandBuffer,
    command_buffer_count: u32,
    p_command_buffers: *const crate::vk1_0::CommandBuffer,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/PFN_vkInternalAllocationNotification.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkInternalAllocationNotification = unsafe extern "system" fn(
    p_user_data: *mut std::ffi::c_void,
    size: usize,
    allocation_type: crate::vk1_0::InternalAllocationType,
    allocation_scope: crate::vk1_0::SystemAllocationScope,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/PFN_vkInternalFreeNotification.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkInternalFreeNotification = unsafe extern "system" fn(
    p_user_data: *mut std::ffi::c_void,
    size: usize,
    allocation_type: crate::vk1_0::InternalAllocationType,
    allocation_scope: crate::vk1_0::SystemAllocationScope,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/PFN_vkReallocationFunction.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkReallocationFunction = unsafe extern "system" fn(
    p_user_data: *mut std::ffi::c_void,
    p_original: *mut std::ffi::c_void,
    size: usize,
    alignment: usize,
    allocation_scope: crate::vk1_0::SystemAllocationScope,
) -> *mut std::ffi::c_void;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/PFN_vkAllocationFunction.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkAllocationFunction = unsafe extern "system" fn(
    p_user_data: *mut std::ffi::c_void,
    size: usize,
    alignment: usize,
    allocation_scope: crate::vk1_0::SystemAllocationScope,
) -> *mut std::ffi::c_void;
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/PFN_vkFreeFunction.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkFreeFunction = unsafe extern "system" fn(
    p_user_data: *mut std::ffi::c_void,
    p_memory: *mut std::ffi::c_void,
) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/PFN_vkVoidFunction.html) · Function"]
#[allow(non_camel_case_types)]
pub type PFN_vkVoidFunction = unsafe extern "system" fn(unnamed: std::ffi::c_void) -> ();
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBaseOutStructure.html) · Structure"]
#[doc(alias = "VkBaseOutStructure")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct BaseOutStructure {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *mut crate::vk1_0::BaseOutStructure,
}
impl Default for BaseOutStructure {
    fn default() -> Self {
        Self {
            s_type: Default::default(),
            p_next: std::ptr::null_mut(),
        }
    }
}
impl std::fmt::Debug for BaseOutStructure {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("BaseOutStructure")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .finish()
    }
}
impl BaseOutStructure {
    #[inline]
    pub fn into_builder<'a>(self) -> BaseOutStructureBuilder<'a> {
        BaseOutStructureBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBaseOutStructure.html) · Builder of [`BaseOutStructure`]"]
#[repr(transparent)]
pub struct BaseOutStructureBuilder<'a>(BaseOutStructure, std::marker::PhantomData<&'a ()>);
impl<'a> BaseOutStructureBuilder<'a> {
    #[inline]
    pub fn new() -> BaseOutStructureBuilder<'a> {
        BaseOutStructureBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn next(mut self, next: &'a mut crate::vk1_0::BaseOutStructure) -> Self {
        self.0.p_next = next as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> BaseOutStructure {
        self.0
    }
}
impl<'a> std::default::Default for BaseOutStructureBuilder<'a> {
    fn default() -> BaseOutStructureBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for BaseOutStructureBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for BaseOutStructureBuilder<'a> {
    type Target = BaseOutStructure;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for BaseOutStructureBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBaseInStructure.html) · Structure"]
#[doc(alias = "VkBaseInStructure")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct BaseInStructure {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const crate::vk1_0::BaseInStructure,
}
impl Default for BaseInStructure {
    fn default() -> Self {
        Self {
            s_type: Default::default(),
            p_next: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for BaseInStructure {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("BaseInStructure")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .finish()
    }
}
impl BaseInStructure {
    #[inline]
    pub fn into_builder<'a>(self) -> BaseInStructureBuilder<'a> {
        BaseInStructureBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBaseInStructure.html) · Builder of [`BaseInStructure`]"]
#[repr(transparent)]
pub struct BaseInStructureBuilder<'a>(BaseInStructure, std::marker::PhantomData<&'a ()>);
impl<'a> BaseInStructureBuilder<'a> {
    #[inline]
    pub fn new() -> BaseInStructureBuilder<'a> {
        BaseInStructureBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn next(mut self, next: &'a crate::vk1_0::BaseInStructure) -> Self {
        self.0.p_next = next as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> BaseInStructure {
        self.0
    }
}
impl<'a> std::default::Default for BaseInStructureBuilder<'a> {
    fn default() -> BaseInStructureBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for BaseInStructureBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for BaseInStructureBuilder<'a> {
    type Target = BaseInStructure;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for BaseInStructureBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkOffset2D.html) · Structure"]
#[doc(alias = "VkOffset2D")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Offset2D {
    pub x: i32,
    pub y: i32,
}
impl Default for Offset2D {
    fn default() -> Self {
        Self {
            x: Default::default(),
            y: Default::default(),
        }
    }
}
impl std::fmt::Debug for Offset2D {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("Offset2D")
            .field("x", &self.x)
            .field("y", &self.y)
            .finish()
    }
}
impl Offset2D {
    #[inline]
    pub fn into_builder<'a>(self) -> Offset2DBuilder<'a> {
        Offset2DBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkOffset2D.html) · Builder of [`Offset2D`]"]
#[repr(transparent)]
pub struct Offset2DBuilder<'a>(Offset2D, std::marker::PhantomData<&'a ()>);
impl<'a> Offset2DBuilder<'a> {
    #[inline]
    pub fn new() -> Offset2DBuilder<'a> {
        Offset2DBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn x(mut self, x: i32) -> Self {
        self.0.x = x as _;
        self
    }
    #[inline]
    pub fn y(mut self, y: i32) -> Self {
        self.0.y = y as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> Offset2D {
        self.0
    }
}
impl<'a> std::default::Default for Offset2DBuilder<'a> {
    fn default() -> Offset2DBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for Offset2DBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for Offset2DBuilder<'a> {
    type Target = Offset2D;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for Offset2DBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkOffset3D.html) · Structure"]
#[doc(alias = "VkOffset3D")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Offset3D {
    pub x: i32,
    pub y: i32,
    pub z: i32,
}
impl Default for Offset3D {
    fn default() -> Self {
        Self {
            x: Default::default(),
            y: Default::default(),
            z: Default::default(),
        }
    }
}
impl std::fmt::Debug for Offset3D {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("Offset3D")
            .field("x", &self.x)
            .field("y", &self.y)
            .field("z", &self.z)
            .finish()
    }
}
impl Offset3D {
    #[inline]
    pub fn into_builder<'a>(self) -> Offset3DBuilder<'a> {
        Offset3DBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkOffset3D.html) · Builder of [`Offset3D`]"]
#[repr(transparent)]
pub struct Offset3DBuilder<'a>(Offset3D, std::marker::PhantomData<&'a ()>);
impl<'a> Offset3DBuilder<'a> {
    #[inline]
    pub fn new() -> Offset3DBuilder<'a> {
        Offset3DBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn x(mut self, x: i32) -> Self {
        self.0.x = x as _;
        self
    }
    #[inline]
    pub fn y(mut self, y: i32) -> Self {
        self.0.y = y as _;
        self
    }
    #[inline]
    pub fn z(mut self, z: i32) -> Self {
        self.0.z = z as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> Offset3D {
        self.0
    }
}
impl<'a> std::default::Default for Offset3DBuilder<'a> {
    fn default() -> Offset3DBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for Offset3DBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for Offset3DBuilder<'a> {
    type Target = Offset3D;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for Offset3DBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkExtent2D.html) · Structure"]
#[doc(alias = "VkExtent2D")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Extent2D {
    pub width: u32,
    pub height: u32,
}
impl Default for Extent2D {
    fn default() -> Self {
        Self {
            width: Default::default(),
            height: Default::default(),
        }
    }
}
impl std::fmt::Debug for Extent2D {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("Extent2D")
            .field("width", &self.width)
            .field("height", &self.height)
            .finish()
    }
}
impl Extent2D {
    #[inline]
    pub fn into_builder<'a>(self) -> Extent2DBuilder<'a> {
        Extent2DBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkExtent2D.html) · Builder of [`Extent2D`]"]
#[repr(transparent)]
pub struct Extent2DBuilder<'a>(Extent2D, std::marker::PhantomData<&'a ()>);
impl<'a> Extent2DBuilder<'a> {
    #[inline]
    pub fn new() -> Extent2DBuilder<'a> {
        Extent2DBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn width(mut self, width: u32) -> Self {
        self.0.width = width as _;
        self
    }
    #[inline]
    pub fn height(mut self, height: u32) -> Self {
        self.0.height = height as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> Extent2D {
        self.0
    }
}
impl<'a> std::default::Default for Extent2DBuilder<'a> {
    fn default() -> Extent2DBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for Extent2DBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for Extent2DBuilder<'a> {
    type Target = Extent2D;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for Extent2DBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkExtent3D.html) · Structure"]
#[doc(alias = "VkExtent3D")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Extent3D {
    pub width: u32,
    pub height: u32,
    pub depth: u32,
}
impl Default for Extent3D {
    fn default() -> Self {
        Self {
            width: Default::default(),
            height: Default::default(),
            depth: Default::default(),
        }
    }
}
impl std::fmt::Debug for Extent3D {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("Extent3D")
            .field("width", &self.width)
            .field("height", &self.height)
            .field("depth", &self.depth)
            .finish()
    }
}
impl Extent3D {
    #[inline]
    pub fn into_builder<'a>(self) -> Extent3DBuilder<'a> {
        Extent3DBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkExtent3D.html) · Builder of [`Extent3D`]"]
#[repr(transparent)]
pub struct Extent3DBuilder<'a>(Extent3D, std::marker::PhantomData<&'a ()>);
impl<'a> Extent3DBuilder<'a> {
    #[inline]
    pub fn new() -> Extent3DBuilder<'a> {
        Extent3DBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn width(mut self, width: u32) -> Self {
        self.0.width = width as _;
        self
    }
    #[inline]
    pub fn height(mut self, height: u32) -> Self {
        self.0.height = height as _;
        self
    }
    #[inline]
    pub fn depth(mut self, depth: u32) -> Self {
        self.0.depth = depth as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> Extent3D {
        self.0
    }
}
impl<'a> std::default::Default for Extent3DBuilder<'a> {
    fn default() -> Extent3DBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for Extent3DBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for Extent3DBuilder<'a> {
    type Target = Extent3D;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for Extent3DBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkViewport.html) · Structure"]
#[doc(alias = "VkViewport")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Viewport {
    pub x: std::os::raw::c_float,
    pub y: std::os::raw::c_float,
    pub width: std::os::raw::c_float,
    pub height: std::os::raw::c_float,
    pub min_depth: std::os::raw::c_float,
    pub max_depth: std::os::raw::c_float,
}
impl Default for Viewport {
    fn default() -> Self {
        Self {
            x: Default::default(),
            y: Default::default(),
            width: Default::default(),
            height: Default::default(),
            min_depth: Default::default(),
            max_depth: Default::default(),
        }
    }
}
impl std::fmt::Debug for Viewport {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("Viewport")
            .field("x", &self.x)
            .field("y", &self.y)
            .field("width", &self.width)
            .field("height", &self.height)
            .field("min_depth", &self.min_depth)
            .field("max_depth", &self.max_depth)
            .finish()
    }
}
impl Viewport {
    #[inline]
    pub fn into_builder<'a>(self) -> ViewportBuilder<'a> {
        ViewportBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkViewport.html) · Builder of [`Viewport`]"]
#[repr(transparent)]
pub struct ViewportBuilder<'a>(Viewport, std::marker::PhantomData<&'a ()>);
impl<'a> ViewportBuilder<'a> {
    #[inline]
    pub fn new() -> ViewportBuilder<'a> {
        ViewportBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn x(mut self, x: std::os::raw::c_float) -> Self {
        self.0.x = x as _;
        self
    }
    #[inline]
    pub fn y(mut self, y: std::os::raw::c_float) -> Self {
        self.0.y = y as _;
        self
    }
    #[inline]
    pub fn width(mut self, width: std::os::raw::c_float) -> Self {
        self.0.width = width as _;
        self
    }
    #[inline]
    pub fn height(mut self, height: std::os::raw::c_float) -> Self {
        self.0.height = height as _;
        self
    }
    #[inline]
    pub fn min_depth(mut self, min_depth: std::os::raw::c_float) -> Self {
        self.0.min_depth = min_depth as _;
        self
    }
    #[inline]
    pub fn max_depth(mut self, max_depth: std::os::raw::c_float) -> Self {
        self.0.max_depth = max_depth as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> Viewport {
        self.0
    }
}
impl<'a> std::default::Default for ViewportBuilder<'a> {
    fn default() -> ViewportBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ViewportBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ViewportBuilder<'a> {
    type Target = Viewport;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ViewportBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkRect2D.html) · Structure"]
#[doc(alias = "VkRect2D")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct Rect2D {
    pub offset: crate::vk1_0::Offset2D,
    pub extent: crate::vk1_0::Extent2D,
}
impl Default for Rect2D {
    fn default() -> Self {
        Self {
            offset: Default::default(),
            extent: Default::default(),
        }
    }
}
impl std::fmt::Debug for Rect2D {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("Rect2D")
            .field("offset", &self.offset)
            .field("extent", &self.extent)
            .finish()
    }
}
impl Rect2D {
    #[inline]
    pub fn into_builder<'a>(self) -> Rect2DBuilder<'a> {
        Rect2DBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkRect2D.html) · Builder of [`Rect2D`]"]
#[repr(transparent)]
pub struct Rect2DBuilder<'a>(Rect2D, std::marker::PhantomData<&'a ()>);
impl<'a> Rect2DBuilder<'a> {
    #[inline]
    pub fn new() -> Rect2DBuilder<'a> {
        Rect2DBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn offset(mut self, offset: crate::vk1_0::Offset2D) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    pub fn extent(mut self, extent: crate::vk1_0::Extent2D) -> Self {
        self.0.extent = extent as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> Rect2D {
        self.0
    }
}
impl<'a> std::default::Default for Rect2DBuilder<'a> {
    fn default() -> Rect2DBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for Rect2DBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for Rect2DBuilder<'a> {
    type Target = Rect2D;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for Rect2DBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkClearRect.html) · Structure"]
#[doc(alias = "VkClearRect")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ClearRect {
    pub rect: crate::vk1_0::Rect2D,
    pub base_array_layer: u32,
    pub layer_count: u32,
}
impl Default for ClearRect {
    fn default() -> Self {
        Self {
            rect: Default::default(),
            base_array_layer: Default::default(),
            layer_count: Default::default(),
        }
    }
}
impl std::fmt::Debug for ClearRect {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ClearRect")
            .field("rect", &self.rect)
            .field("base_array_layer", &self.base_array_layer)
            .field("layer_count", &self.layer_count)
            .finish()
    }
}
impl ClearRect {
    #[inline]
    pub fn into_builder<'a>(self) -> ClearRectBuilder<'a> {
        ClearRectBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkClearRect.html) · Builder of [`ClearRect`]"]
#[repr(transparent)]
pub struct ClearRectBuilder<'a>(ClearRect, std::marker::PhantomData<&'a ()>);
impl<'a> ClearRectBuilder<'a> {
    #[inline]
    pub fn new() -> ClearRectBuilder<'a> {
        ClearRectBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn rect(mut self, rect: crate::vk1_0::Rect2D) -> Self {
        self.0.rect = rect as _;
        self
    }
    #[inline]
    pub fn base_array_layer(mut self, base_array_layer: u32) -> Self {
        self.0.base_array_layer = base_array_layer as _;
        self
    }
    #[inline]
    pub fn layer_count(mut self, layer_count: u32) -> Self {
        self.0.layer_count = layer_count as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ClearRect {
        self.0
    }
}
impl<'a> std::default::Default for ClearRectBuilder<'a> {
    fn default() -> ClearRectBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ClearRectBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ClearRectBuilder<'a> {
    type Target = ClearRect;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ClearRectBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkComponentMapping.html) · Structure"]
#[doc(alias = "VkComponentMapping")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ComponentMapping {
    pub r: crate::vk1_0::ComponentSwizzle,
    pub g: crate::vk1_0::ComponentSwizzle,
    pub b: crate::vk1_0::ComponentSwizzle,
    pub a: crate::vk1_0::ComponentSwizzle,
}
impl Default for ComponentMapping {
    fn default() -> Self {
        Self {
            r: Default::default(),
            g: Default::default(),
            b: Default::default(),
            a: Default::default(),
        }
    }
}
impl std::fmt::Debug for ComponentMapping {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ComponentMapping")
            .field("r", &self.r)
            .field("g", &self.g)
            .field("b", &self.b)
            .field("a", &self.a)
            .finish()
    }
}
impl ComponentMapping {
    #[inline]
    pub fn into_builder<'a>(self) -> ComponentMappingBuilder<'a> {
        ComponentMappingBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkComponentMapping.html) · Builder of [`ComponentMapping`]"]
#[repr(transparent)]
pub struct ComponentMappingBuilder<'a>(ComponentMapping, std::marker::PhantomData<&'a ()>);
impl<'a> ComponentMappingBuilder<'a> {
    #[inline]
    pub fn new() -> ComponentMappingBuilder<'a> {
        ComponentMappingBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn r(mut self, r: crate::vk1_0::ComponentSwizzle) -> Self {
        self.0.r = r as _;
        self
    }
    #[inline]
    pub fn g(mut self, g: crate::vk1_0::ComponentSwizzle) -> Self {
        self.0.g = g as _;
        self
    }
    #[inline]
    pub fn b(mut self, b: crate::vk1_0::ComponentSwizzle) -> Self {
        self.0.b = b as _;
        self
    }
    #[inline]
    pub fn a(mut self, a: crate::vk1_0::ComponentSwizzle) -> Self {
        self.0.a = a as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ComponentMapping {
        self.0
    }
}
impl<'a> std::default::Default for ComponentMappingBuilder<'a> {
    fn default() -> ComponentMappingBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ComponentMappingBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ComponentMappingBuilder<'a> {
    type Target = ComponentMapping;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ComponentMappingBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceProperties.html) · Structure"]
#[doc(alias = "VkPhysicalDeviceProperties")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PhysicalDeviceProperties {
    pub api_version: u32,
    pub driver_version: u32,
    pub vendor_id: u32,
    pub device_id: u32,
    pub device_type: crate::vk1_0::PhysicalDeviceType,
    pub device_name: [std::os::raw::c_char; 256],
    pub pipeline_cache_uuid: [u8; 16],
    pub limits: crate::vk1_0::PhysicalDeviceLimits,
    pub sparse_properties: crate::vk1_0::PhysicalDeviceSparseProperties,
}
impl Default for PhysicalDeviceProperties {
    fn default() -> Self {
        Self {
            api_version: Default::default(),
            driver_version: Default::default(),
            vendor_id: Default::default(),
            device_id: Default::default(),
            device_type: Default::default(),
            device_name: unsafe { std::mem::zeroed() },
            pipeline_cache_uuid: unsafe { std::mem::zeroed() },
            limits: Default::default(),
            sparse_properties: Default::default(),
        }
    }
}
impl std::fmt::Debug for PhysicalDeviceProperties {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PhysicalDeviceProperties")
            .field("api_version", &self.api_version)
            .field("driver_version", &self.driver_version)
            .field("vendor_id", &self.vendor_id)
            .field("device_id", &self.device_id)
            .field("device_type", &self.device_type)
            .field("device_name", unsafe {
                &std::ffi::CStr::from_ptr(self.device_name.as_ptr())
            })
            .field("pipeline_cache_uuid", &self.pipeline_cache_uuid)
            .field("limits", &self.limits)
            .field("sparse_properties", &self.sparse_properties)
            .finish()
    }
}
impl PhysicalDeviceProperties {
    #[inline]
    pub fn into_builder<'a>(self) -> PhysicalDevicePropertiesBuilder<'a> {
        PhysicalDevicePropertiesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceProperties.html) · Builder of [`PhysicalDeviceProperties`]"]
#[repr(transparent)]
pub struct PhysicalDevicePropertiesBuilder<'a>(
    PhysicalDeviceProperties,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PhysicalDevicePropertiesBuilder<'a> {
    #[inline]
    pub fn new() -> PhysicalDevicePropertiesBuilder<'a> {
        PhysicalDevicePropertiesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn api_version(mut self, api_version: u32) -> Self {
        self.0.api_version = api_version as _;
        self
    }
    #[inline]
    pub fn driver_version(mut self, driver_version: u32) -> Self {
        self.0.driver_version = driver_version as _;
        self
    }
    #[inline]
    pub fn vendor_id(mut self, vendor_id: u32) -> Self {
        self.0.vendor_id = vendor_id as _;
        self
    }
    #[inline]
    pub fn device_id(mut self, device_id: u32) -> Self {
        self.0.device_id = device_id as _;
        self
    }
    #[inline]
    pub fn device_type(mut self, device_type: crate::vk1_0::PhysicalDeviceType) -> Self {
        self.0.device_type = device_type as _;
        self
    }
    #[inline]
    pub fn device_name(mut self, device_name: [std::os::raw::c_char; 256]) -> Self {
        self.0.device_name = device_name as _;
        self
    }
    #[inline]
    pub fn pipeline_cache_uuid(mut self, pipeline_cache_uuid: [u8; 16]) -> Self {
        self.0.pipeline_cache_uuid = pipeline_cache_uuid as _;
        self
    }
    #[inline]
    pub fn limits(mut self, limits: crate::vk1_0::PhysicalDeviceLimits) -> Self {
        self.0.limits = limits as _;
        self
    }
    #[inline]
    pub fn sparse_properties(
        mut self,
        sparse_properties: crate::vk1_0::PhysicalDeviceSparseProperties,
    ) -> Self {
        self.0.sparse_properties = sparse_properties as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PhysicalDeviceProperties {
        self.0
    }
}
impl<'a> std::default::Default for PhysicalDevicePropertiesBuilder<'a> {
    fn default() -> PhysicalDevicePropertiesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PhysicalDevicePropertiesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PhysicalDevicePropertiesBuilder<'a> {
    type Target = PhysicalDeviceProperties;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PhysicalDevicePropertiesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkExtensionProperties.html) · Structure"]
#[doc(alias = "VkExtensionProperties")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ExtensionProperties {
    pub extension_name: [std::os::raw::c_char; 256],
    pub spec_version: u32,
}
impl Default for ExtensionProperties {
    fn default() -> Self {
        Self {
            extension_name: unsafe { std::mem::zeroed() },
            spec_version: Default::default(),
        }
    }
}
impl std::fmt::Debug for ExtensionProperties {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ExtensionProperties")
            .field("extension_name", unsafe {
                &std::ffi::CStr::from_ptr(self.extension_name.as_ptr())
            })
            .field("spec_version", &self.spec_version)
            .finish()
    }
}
impl ExtensionProperties {
    #[inline]
    pub fn into_builder<'a>(self) -> ExtensionPropertiesBuilder<'a> {
        ExtensionPropertiesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkExtensionProperties.html) · Builder of [`ExtensionProperties`]"]
#[repr(transparent)]
pub struct ExtensionPropertiesBuilder<'a>(ExtensionProperties, std::marker::PhantomData<&'a ()>);
impl<'a> ExtensionPropertiesBuilder<'a> {
    #[inline]
    pub fn new() -> ExtensionPropertiesBuilder<'a> {
        ExtensionPropertiesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn extension_name(mut self, extension_name: [std::os::raw::c_char; 256]) -> Self {
        self.0.extension_name = extension_name as _;
        self
    }
    #[inline]
    pub fn spec_version(mut self, spec_version: u32) -> Self {
        self.0.spec_version = spec_version as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ExtensionProperties {
        self.0
    }
}
impl<'a> std::default::Default for ExtensionPropertiesBuilder<'a> {
    fn default() -> ExtensionPropertiesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ExtensionPropertiesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ExtensionPropertiesBuilder<'a> {
    type Target = ExtensionProperties;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ExtensionPropertiesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkLayerProperties.html) · Structure"]
#[doc(alias = "VkLayerProperties")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct LayerProperties {
    pub layer_name: [std::os::raw::c_char; 256],
    pub spec_version: u32,
    pub implementation_version: u32,
    pub description: [std::os::raw::c_char; 256],
}
impl Default for LayerProperties {
    fn default() -> Self {
        Self {
            layer_name: unsafe { std::mem::zeroed() },
            spec_version: Default::default(),
            implementation_version: Default::default(),
            description: unsafe { std::mem::zeroed() },
        }
    }
}
impl std::fmt::Debug for LayerProperties {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("LayerProperties")
            .field("layer_name", unsafe {
                &std::ffi::CStr::from_ptr(self.layer_name.as_ptr())
            })
            .field("spec_version", &self.spec_version)
            .field("implementation_version", &self.implementation_version)
            .field("description", unsafe {
                &std::ffi::CStr::from_ptr(self.description.as_ptr())
            })
            .finish()
    }
}
impl LayerProperties {
    #[inline]
    pub fn into_builder<'a>(self) -> LayerPropertiesBuilder<'a> {
        LayerPropertiesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkLayerProperties.html) · Builder of [`LayerProperties`]"]
#[repr(transparent)]
pub struct LayerPropertiesBuilder<'a>(LayerProperties, std::marker::PhantomData<&'a ()>);
impl<'a> LayerPropertiesBuilder<'a> {
    #[inline]
    pub fn new() -> LayerPropertiesBuilder<'a> {
        LayerPropertiesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn layer_name(mut self, layer_name: [std::os::raw::c_char; 256]) -> Self {
        self.0.layer_name = layer_name as _;
        self
    }
    #[inline]
    pub fn spec_version(mut self, spec_version: u32) -> Self {
        self.0.spec_version = spec_version as _;
        self
    }
    #[inline]
    pub fn implementation_version(mut self, implementation_version: u32) -> Self {
        self.0.implementation_version = implementation_version as _;
        self
    }
    #[inline]
    pub fn description(mut self, description: [std::os::raw::c_char; 256]) -> Self {
        self.0.description = description as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> LayerProperties {
        self.0
    }
}
impl<'a> std::default::Default for LayerPropertiesBuilder<'a> {
    fn default() -> LayerPropertiesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for LayerPropertiesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for LayerPropertiesBuilder<'a> {
    type Target = LayerProperties;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for LayerPropertiesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkApplicationInfo.html) · Structure"]
#[doc(alias = "VkApplicationInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ApplicationInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub p_application_name: *const std::os::raw::c_char,
    pub application_version: u32,
    pub p_engine_name: *const std::os::raw::c_char,
    pub engine_version: u32,
    pub api_version: u32,
}
impl Default for ApplicationInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::APPLICATION_INFO,
            p_next: std::ptr::null(),
            p_application_name: std::ptr::null(),
            application_version: Default::default(),
            p_engine_name: std::ptr::null(),
            engine_version: Default::default(),
            api_version: Default::default(),
        }
    }
}
impl std::fmt::Debug for ApplicationInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ApplicationInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("p_application_name", &self.p_application_name)
            .field("application_version", &self.application_version)
            .field("p_engine_name", &self.p_engine_name)
            .field("engine_version", &self.engine_version)
            .field("api_version", &self.api_version)
            .finish()
    }
}
impl ApplicationInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> ApplicationInfoBuilder<'a> {
        ApplicationInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkApplicationInfo.html) · Builder of [`ApplicationInfo`]"]
#[repr(transparent)]
pub struct ApplicationInfoBuilder<'a>(ApplicationInfo, std::marker::PhantomData<&'a ()>);
impl<'a> ApplicationInfoBuilder<'a> {
    #[inline]
    pub fn new() -> ApplicationInfoBuilder<'a> {
        ApplicationInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn application_name(mut self, application_name: &'a std::ffi::CStr) -> Self {
        self.0.p_application_name = application_name.as_ptr();
        self
    }
    #[inline]
    pub fn application_version(mut self, application_version: u32) -> Self {
        self.0.application_version = application_version as _;
        self
    }
    #[inline]
    pub fn engine_name(mut self, engine_name: &'a std::ffi::CStr) -> Self {
        self.0.p_engine_name = engine_name.as_ptr();
        self
    }
    #[inline]
    pub fn engine_version(mut self, engine_version: u32) -> Self {
        self.0.engine_version = engine_version as _;
        self
    }
    #[inline]
    pub fn api_version(mut self, api_version: u32) -> Self {
        self.0.api_version = api_version as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ApplicationInfo {
        self.0
    }
}
impl<'a> std::default::Default for ApplicationInfoBuilder<'a> {
    fn default() -> ApplicationInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ApplicationInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ApplicationInfoBuilder<'a> {
    type Target = ApplicationInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ApplicationInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAllocationCallbacks.html) · Structure"]
#[doc(alias = "VkAllocationCallbacks")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct AllocationCallbacks {
    pub p_user_data: *mut std::ffi::c_void,
    pub pfn_allocation: Option<crate::vk1_0::PFN_vkAllocationFunction>,
    pub pfn_reallocation: Option<crate::vk1_0::PFN_vkReallocationFunction>,
    pub pfn_free: Option<crate::vk1_0::PFN_vkFreeFunction>,
    pub pfn_internal_allocation: Option<crate::vk1_0::PFN_vkInternalAllocationNotification>,
    pub pfn_internal_free: Option<crate::vk1_0::PFN_vkInternalFreeNotification>,
}
impl Default for AllocationCallbacks {
    fn default() -> Self {
        Self {
            p_user_data: std::ptr::null_mut(),
            pfn_allocation: Default::default(),
            pfn_reallocation: Default::default(),
            pfn_free: Default::default(),
            pfn_internal_allocation: Default::default(),
            pfn_internal_free: Default::default(),
        }
    }
}
impl std::fmt::Debug for AllocationCallbacks {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("AllocationCallbacks")
            .field("p_user_data", &self.p_user_data)
            .field("pfn_allocation", unsafe {
                &std::mem::transmute::<_, *const ()>(self.pfn_allocation)
            })
            .field("pfn_reallocation", unsafe {
                &std::mem::transmute::<_, *const ()>(self.pfn_reallocation)
            })
            .field("pfn_free", unsafe {
                &std::mem::transmute::<_, *const ()>(self.pfn_free)
            })
            .field("pfn_internal_allocation", unsafe {
                &std::mem::transmute::<_, *const ()>(self.pfn_internal_allocation)
            })
            .field("pfn_internal_free", unsafe {
                &std::mem::transmute::<_, *const ()>(self.pfn_internal_free)
            })
            .finish()
    }
}
impl AllocationCallbacks {
    #[inline]
    pub fn into_builder<'a>(self) -> AllocationCallbacksBuilder<'a> {
        AllocationCallbacksBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAllocationCallbacks.html) · Builder of [`AllocationCallbacks`]"]
#[repr(transparent)]
pub struct AllocationCallbacksBuilder<'a>(AllocationCallbacks, std::marker::PhantomData<&'a ()>);
impl<'a> AllocationCallbacksBuilder<'a> {
    #[inline]
    pub fn new() -> AllocationCallbacksBuilder<'a> {
        AllocationCallbacksBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn user_data(mut self, user_data: *mut std::ffi::c_void) -> Self {
        self.0.p_user_data = user_data;
        self
    }
    #[inline]
    pub fn pfn_allocation(
        mut self,
        pfn_allocation: Option<crate::vk1_0::PFN_vkAllocationFunction>,
    ) -> Self {
        self.0.pfn_allocation = pfn_allocation as _;
        self
    }
    #[inline]
    pub fn pfn_reallocation(
        mut self,
        pfn_reallocation: Option<crate::vk1_0::PFN_vkReallocationFunction>,
    ) -> Self {
        self.0.pfn_reallocation = pfn_reallocation as _;
        self
    }
    #[inline]
    pub fn pfn_free(mut self, pfn_free: Option<crate::vk1_0::PFN_vkFreeFunction>) -> Self {
        self.0.pfn_free = pfn_free as _;
        self
    }
    #[inline]
    pub fn pfn_internal_allocation(
        mut self,
        pfn_internal_allocation: Option<crate::vk1_0::PFN_vkInternalAllocationNotification>,
    ) -> Self {
        self.0.pfn_internal_allocation = pfn_internal_allocation as _;
        self
    }
    #[inline]
    pub fn pfn_internal_free(
        mut self,
        pfn_internal_free: Option<crate::vk1_0::PFN_vkInternalFreeNotification>,
    ) -> Self {
        self.0.pfn_internal_free = pfn_internal_free as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> AllocationCallbacks {
        self.0
    }
}
impl<'a> std::default::Default for AllocationCallbacksBuilder<'a> {
    fn default() -> AllocationCallbacksBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for AllocationCallbacksBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for AllocationCallbacksBuilder<'a> {
    type Target = AllocationCallbacks;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for AllocationCallbacksBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceQueueCreateInfo.html) · Structure"]
#[doc(alias = "VkDeviceQueueCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DeviceQueueCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::DeviceQueueCreateFlags,
    pub queue_family_index: u32,
    pub queue_count: u32,
    pub p_queue_priorities: *const std::os::raw::c_float,
}
impl Default for DeviceQueueCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::DEVICE_QUEUE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            queue_family_index: Default::default(),
            queue_count: Default::default(),
            p_queue_priorities: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for DeviceQueueCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DeviceQueueCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("queue_family_index", &self.queue_family_index)
            .field("queue_count", &self.queue_count)
            .field("p_queue_priorities", &self.p_queue_priorities)
            .finish()
    }
}
impl DeviceQueueCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> DeviceQueueCreateInfoBuilder<'a> {
        DeviceQueueCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_global_priority::DeviceQueueGlobalPriorityCreateInfoEXT,
    > for DeviceQueueCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_global_priority::DeviceQueueGlobalPriorityCreateInfoEXTBuilder<'_>,
    > for DeviceQueueCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceQueueCreateInfo.html) · Builder of [`DeviceQueueCreateInfo`]"]
#[repr(transparent)]
pub struct DeviceQueueCreateInfoBuilder<'a>(
    DeviceQueueCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> DeviceQueueCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> DeviceQueueCreateInfoBuilder<'a> {
        DeviceQueueCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::DeviceQueueCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn queue_family_index(mut self, queue_family_index: u32) -> Self {
        self.0.queue_family_index = queue_family_index as _;
        self
    }
    #[inline]
    pub fn queue_priorities(mut self, queue_priorities: &'a [std::os::raw::c_float]) -> Self {
        self.0.p_queue_priorities = queue_priorities.as_ptr() as _;
        self.0.queue_count = queue_priorities.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DeviceQueueCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for DeviceQueueCreateInfoBuilder<'a> {
    fn default() -> DeviceQueueCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DeviceQueueCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DeviceQueueCreateInfoBuilder<'a> {
    type Target = DeviceQueueCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DeviceQueueCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceCreateInfo.html) · Structure"]
#[doc(alias = "VkDeviceCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DeviceCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::DeviceCreateFlags,
    pub queue_create_info_count: u32,
    pub p_queue_create_infos: *const crate::vk1_0::DeviceQueueCreateInfo,
    pub enabled_layer_count: u32,
    pub pp_enabled_layer_names: *const *const std::os::raw::c_char,
    pub enabled_extension_count: u32,
    pub pp_enabled_extension_names: *const *const std::os::raw::c_char,
    pub p_enabled_features: *const crate::vk1_0::PhysicalDeviceFeatures,
}
impl Default for DeviceCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::DEVICE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            queue_create_info_count: Default::default(),
            p_queue_create_infos: std::ptr::null(),
            enabled_layer_count: Default::default(),
            pp_enabled_layer_names: std::ptr::null(),
            enabled_extension_count: Default::default(),
            pp_enabled_extension_names: std::ptr::null(),
            p_enabled_features: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for DeviceCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DeviceCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("queue_create_info_count", &self.queue_create_info_count)
            .field("p_queue_create_infos", &self.p_queue_create_infos)
            .field("enabled_layer_count", &self.enabled_layer_count)
            .field("pp_enabled_layer_names", &self.pp_enabled_layer_names)
            .field("enabled_extension_count", &self.enabled_extension_count)
            .field(
                "pp_enabled_extension_names",
                &self.pp_enabled_extension_names,
            )
            .field("p_enabled_features", &self.p_enabled_features)
            .finish()
    }
}
impl DeviceCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> DeviceCreateInfoBuilder<'a> {
        DeviceCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_device_generated_commands :: PhysicalDeviceDeviceGeneratedCommandsFeaturesNV > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_device_generated_commands :: PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<'a, crate::extensions::ext_private_data::DevicePrivateDataCreateInfoEXT>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_private_data::DevicePrivateDataCreateInfoEXTBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_private_data::PhysicalDevicePrivateDataFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_private_data::PhysicalDevicePrivateDataFeaturesEXTBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceFeatures2>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceFeatures2Builder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceVariablePointersFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceVariablePointersFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceMultiviewFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceMultiviewFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupDeviceCreateInfo>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupDeviceCreateInfoBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDevice16BitStorageFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDevice16BitStorageFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceShaderSubgroupExtendedTypesFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::vk1_2::PhysicalDeviceShaderSubgroupExtendedTypesFeaturesBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceSamplerYcbcrConversionFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceSamplerYcbcrConversionFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceProtectedMemoryFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceProtectedMemoryFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_blend_operation_advanced :: PhysicalDeviceBlendOperationAdvancedFeaturesEXT > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_blend_operation_advanced :: PhysicalDeviceBlendOperationAdvancedFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_inline_uniform_block::PhysicalDeviceInlineUniformBlockFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_inline_uniform_block :: PhysicalDeviceInlineUniformBlockFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceShaderDrawParametersFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::vk1_1::PhysicalDeviceShaderDrawParametersFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceShaderFloat16Int8Features>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceShaderFloat16Int8FeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceHostQueryResetFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceHostQueryResetFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_device_memory_report::PhysicalDeviceDeviceMemoryReportFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_device_memory_report :: PhysicalDeviceDeviceMemoryReportFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_device_memory_report::DeviceDeviceMemoryReportCreateInfoEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_device_memory_report::DeviceDeviceMemoryReportCreateInfoEXTBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceDescriptorIndexingFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceDescriptorIndexingFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceTimelineSemaphoreFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceTimelineSemaphoreFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDevice8BitStorageFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDevice8BitStorageFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_conditional_rendering::PhysicalDeviceConditionalRenderingFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_conditional_rendering :: PhysicalDeviceConditionalRenderingFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceVulkanMemoryModelFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceVulkanMemoryModelFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceShaderAtomicInt64Features>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceShaderAtomicInt64FeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_shader_atomic_float::PhysicalDeviceShaderAtomicFloatFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_shader_atomic_float :: PhysicalDeviceShaderAtomicFloatFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_vertex_attribute_divisor :: PhysicalDeviceVertexAttributeDivisorFeaturesEXT > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_vertex_attribute_divisor :: PhysicalDeviceVertexAttributeDivisorFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_astc_decode_mode::PhysicalDeviceASTCDecodeFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_astc_decode_mode::PhysicalDeviceASTCDecodeFeaturesEXTBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_transform_feedback::PhysicalDeviceTransformFeedbackFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_transform_feedback :: PhysicalDeviceTransformFeedbackFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_representative_fragment_test :: PhysicalDeviceRepresentativeFragmentTestFeaturesNV > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_representative_fragment_test :: PhysicalDeviceRepresentativeFragmentTestFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_scissor_exclusive::PhysicalDeviceExclusiveScissorFeaturesNV,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_scissor_exclusive::PhysicalDeviceExclusiveScissorFeaturesNVBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_corner_sampled_image::PhysicalDeviceCornerSampledImageFeaturesNV,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_corner_sampled_image :: PhysicalDeviceCornerSampledImageFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_compute_shader_derivatives :: PhysicalDeviceComputeShaderDerivativesFeaturesNV > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_compute_shader_derivatives :: PhysicalDeviceComputeShaderDerivativesFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_fragment_shader_barycentric :: PhysicalDeviceFragmentShaderBarycentricFeaturesNV > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_fragment_shader_barycentric :: PhysicalDeviceFragmentShaderBarycentricFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_shader_image_footprint::PhysicalDeviceShaderImageFootprintFeaturesNV,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_shader_image_footprint :: PhysicalDeviceShaderImageFootprintFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_dedicated_allocation_image_aliasing :: PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_dedicated_allocation_image_aliasing :: PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_shading_rate_image::PhysicalDeviceShadingRateImageFeaturesNV,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_shading_rate_image::PhysicalDeviceShadingRateImageFeaturesNVBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::extensions::nv_mesh_shader::PhysicalDeviceMeshShaderFeaturesNV>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_mesh_shader::PhysicalDeviceMeshShaderFeaturesNVBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_acceleration_structure :: PhysicalDeviceAccelerationStructureFeaturesKHR > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_acceleration_structure :: PhysicalDeviceAccelerationStructureFeaturesKHRBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_ray_tracing_pipeline::PhysicalDeviceRayTracingPipelineFeaturesKHR,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_ray_tracing_pipeline :: PhysicalDeviceRayTracingPipelineFeaturesKHRBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<'a, crate::extensions::khr_ray_query::PhysicalDeviceRayQueryFeaturesKHR>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_ray_query::PhysicalDeviceRayQueryFeaturesKHRBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: amd_memory_overallocation_behavior :: DeviceMemoryOverallocationCreateInfoAMD > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: amd_memory_overallocation_behavior :: DeviceMemoryOverallocationCreateInfoAMDBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_fragment_density_map::PhysicalDeviceFragmentDensityMapFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_fragment_density_map :: PhysicalDeviceFragmentDensityMapFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_fragment_density_map2::PhysicalDeviceFragmentDensityMap2FeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_fragment_density_map2 :: PhysicalDeviceFragmentDensityMap2FeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceScalarBlockLayoutFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceScalarBlockLayoutFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceUniformBufferStandardLayoutFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::vk1_2::PhysicalDeviceUniformBufferStandardLayoutFeaturesBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_depth_clip_enable::PhysicalDeviceDepthClipEnableFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_depth_clip_enable::PhysicalDeviceDepthClipEnableFeaturesEXTBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_memory_priority::PhysicalDeviceMemoryPriorityFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_memory_priority::PhysicalDeviceMemoryPriorityFeaturesEXTBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceBufferDeviceAddressFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceBufferDeviceAddressFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_buffer_device_address::PhysicalDeviceBufferDeviceAddressFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_buffer_device_address :: PhysicalDeviceBufferDeviceAddressFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceImagelessFramebufferFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceImagelessFramebufferFeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_texture_compression_astc_hdr :: PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_texture_compression_astc_hdr :: PhysicalDeviceTextureCompressionASTCHDRFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_cooperative_matrix::PhysicalDeviceCooperativeMatrixFeaturesNV,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_cooperative_matrix::PhysicalDeviceCooperativeMatrixFeaturesNVBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_ycbcr_image_arrays::PhysicalDeviceYcbcrImageArraysFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_ycbcr_image_arrays::PhysicalDeviceYcbcrImageArraysFeaturesEXTBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_performance_query::PhysicalDevicePerformanceQueryFeaturesKHR,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_performance_query::PhysicalDevicePerformanceQueryFeaturesKHRBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_coverage_reduction_mode :: PhysicalDeviceCoverageReductionModeFeaturesNV > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_coverage_reduction_mode :: PhysicalDeviceCoverageReductionModeFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: intel_shader_integer_functions2 :: PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: intel_shader_integer_functions2 :: PhysicalDeviceShaderIntegerFunctions2FeaturesINTELBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_shader_clock::PhysicalDeviceShaderClockFeaturesKHR,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_shader_clock::PhysicalDeviceShaderClockFeaturesKHRBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_index_type_uint8::PhysicalDeviceIndexTypeUint8FeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_index_type_uint8::PhysicalDeviceIndexTypeUint8FeaturesEXTBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_shader_sm_builtins::PhysicalDeviceShaderSMBuiltinsFeaturesNV,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_shader_sm_builtins::PhysicalDeviceShaderSMBuiltinsFeaturesNVBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_fragment_shader_interlock :: PhysicalDeviceFragmentShaderInterlockFeaturesEXT > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_fragment_shader_interlock :: PhysicalDeviceFragmentShaderInterlockFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceSeparateDepthStencilLayoutsFeatures>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::vk1_2::PhysicalDeviceSeparateDepthStencilLayoutsFeaturesBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_pipeline_executable_properties :: PhysicalDevicePipelineExecutablePropertiesFeaturesKHR > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_pipeline_executable_properties :: PhysicalDevicePipelineExecutablePropertiesFeaturesKHRBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_shader_demote_to_helper_invocation :: PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_shader_demote_to_helper_invocation :: PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_texel_buffer_alignment :: PhysicalDeviceTexelBufferAlignmentFeaturesEXT > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_texel_buffer_alignment :: PhysicalDeviceTexelBufferAlignmentFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_subgroup_size_control::PhysicalDeviceSubgroupSizeControlFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_subgroup_size_control :: PhysicalDeviceSubgroupSizeControlFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_line_rasterization::PhysicalDeviceLineRasterizationFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_line_rasterization :: PhysicalDeviceLineRasterizationFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_pipeline_creation_cache_control :: PhysicalDevicePipelineCreationCacheControlFeaturesEXT > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_pipeline_creation_cache_control :: PhysicalDevicePipelineCreationCacheControlFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceVulkan11Features>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceVulkan11FeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceVulkan12Features>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::PhysicalDeviceVulkan12FeaturesBuilder<'_>>
    for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::amd_device_coherent_memory::PhysicalDeviceCoherentMemoryFeaturesAMD,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: amd_device_coherent_memory :: PhysicalDeviceCoherentMemoryFeaturesAMDBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_custom_border_color::PhysicalDeviceCustomBorderColorFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_custom_border_color :: PhysicalDeviceCustomBorderColorFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_extended_dynamic_state :: PhysicalDeviceExtendedDynamicStateFeaturesEXT > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_extended_dynamic_state :: PhysicalDeviceExtendedDynamicStateFeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_device_diagnostics_config::PhysicalDeviceDiagnosticsConfigFeaturesNV,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_device_diagnostics_config :: PhysicalDeviceDiagnosticsConfigFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_device_diagnostics_config::DeviceDiagnosticsConfigCreateInfoNV,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_device_diagnostics_config::DeviceDiagnosticsConfigCreateInfoNVBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_zero_initialize_workgroup_memory :: PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_zero_initialize_workgroup_memory :: PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHRBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_robustness2::PhysicalDeviceRobustness2FeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_robustness2::PhysicalDeviceRobustness2FeaturesEXTBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_image_robustness::PhysicalDeviceImageRobustnessFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_image_robustness::PhysicalDeviceImageRobustnessFeaturesEXTBuilder<
            '_,
        >,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_workgroup_memory_explicit_layout :: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_workgroup_memory_explicit_layout :: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHRBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_portability_subset::PhysicalDevicePortabilitySubsetFeaturesKHR,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_portability_subset :: PhysicalDevicePortabilitySubsetFeaturesKHRBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_4444_formats::PhysicalDevice4444FormatsFeaturesEXT,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_4444_formats::PhysicalDevice4444FormatsFeaturesEXTBuilder<'_>,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_shader_image_atomic_int64 :: PhysicalDeviceShaderImageAtomicInt64FeaturesEXT > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_shader_image_atomic_int64 :: PhysicalDeviceShaderImageAtomicInt64FeaturesEXTBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_fragment_shading_rate::PhysicalDeviceFragmentShadingRateFeaturesKHR,
    > for DeviceCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_fragment_shading_rate :: PhysicalDeviceFragmentShadingRateFeaturesKHRBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_shader_terminate_invocation :: PhysicalDeviceShaderTerminateInvocationFeaturesKHR > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_shader_terminate_invocation :: PhysicalDeviceShaderTerminateInvocationFeaturesKHRBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_fragment_shading_rate_enums :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_fragment_shading_rate_enums :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNVBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: valve_mutable_descriptor_type :: PhysicalDeviceMutableDescriptorTypeFeaturesVALVE > for DeviceCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: valve_mutable_descriptor_type :: PhysicalDeviceMutableDescriptorTypeFeaturesVALVEBuilder < '_ >> for DeviceCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceCreateInfo.html) · Builder of [`DeviceCreateInfo`]"]
#[repr(transparent)]
pub struct DeviceCreateInfoBuilder<'a>(DeviceCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> DeviceCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> DeviceCreateInfoBuilder<'a> {
        DeviceCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::DeviceCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn queue_create_infos(
        mut self,
        queue_create_infos: &'a [crate::vk1_0::DeviceQueueCreateInfoBuilder],
    ) -> Self {
        self.0.p_queue_create_infos = queue_create_infos.as_ptr() as _;
        self.0.queue_create_info_count = queue_create_infos.len() as _;
        self
    }
    #[inline]
    pub fn enabled_layer_names(
        mut self,
        enabled_layer_names: &'a [*const std::os::raw::c_char],
    ) -> Self {
        self.0.pp_enabled_layer_names = enabled_layer_names.as_ptr() as _;
        self.0.enabled_layer_count = enabled_layer_names.len() as _;
        self
    }
    #[inline]
    pub fn enabled_extension_names(
        mut self,
        enabled_extension_names: &'a [*const std::os::raw::c_char],
    ) -> Self {
        self.0.pp_enabled_extension_names = enabled_extension_names.as_ptr() as _;
        self.0.enabled_extension_count = enabled_extension_names.len() as _;
        self
    }
    #[inline]
    pub fn enabled_features(
        mut self,
        enabled_features: &'a crate::vk1_0::PhysicalDeviceFeatures,
    ) -> Self {
        self.0.p_enabled_features = enabled_features as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DeviceCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for DeviceCreateInfoBuilder<'a> {
    fn default() -> DeviceCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DeviceCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DeviceCreateInfoBuilder<'a> {
    type Target = DeviceCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DeviceCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkInstanceCreateInfo.html) · Structure"]
#[doc(alias = "VkInstanceCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct InstanceCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::InstanceCreateFlags,
    pub p_application_info: *const crate::vk1_0::ApplicationInfo,
    pub enabled_layer_count: u32,
    pub pp_enabled_layer_names: *const *const std::os::raw::c_char,
    pub enabled_extension_count: u32,
    pub pp_enabled_extension_names: *const *const std::os::raw::c_char,
}
impl Default for InstanceCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::INSTANCE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            p_application_info: std::ptr::null(),
            enabled_layer_count: Default::default(),
            pp_enabled_layer_names: std::ptr::null(),
            enabled_extension_count: Default::default(),
            pp_enabled_extension_names: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for InstanceCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("InstanceCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("p_application_info", &self.p_application_info)
            .field("enabled_layer_count", &self.enabled_layer_count)
            .field("pp_enabled_layer_names", &self.pp_enabled_layer_names)
            .field("enabled_extension_count", &self.enabled_extension_count)
            .field(
                "pp_enabled_extension_names",
                &self.pp_enabled_extension_names,
            )
            .finish()
    }
}
impl InstanceCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> InstanceCreateInfoBuilder<'a> {
        InstanceCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<'a, crate::extensions::ext_debug_report::DebugReportCallbackCreateInfoEXT>
    for InstanceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_debug_report::DebugReportCallbackCreateInfoEXTBuilder<'_>,
    > for InstanceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::extensions::ext_validation_flags::ValidationFlagsEXT>
    for InstanceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_validation_flags::ValidationFlagsEXTBuilder<'_>,
    > for InstanceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::extensions::ext_validation_features::ValidationFeaturesEXT>
    for InstanceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_validation_features::ValidationFeaturesEXTBuilder<'_>,
    > for InstanceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::extensions::ext_debug_utils::DebugUtilsMessengerCreateInfoEXT>
    for InstanceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_debug_utils::DebugUtilsMessengerCreateInfoEXTBuilder<'_>,
    > for InstanceCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkInstanceCreateInfo.html) · Builder of [`InstanceCreateInfo`]"]
#[repr(transparent)]
pub struct InstanceCreateInfoBuilder<'a>(InstanceCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> InstanceCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> InstanceCreateInfoBuilder<'a> {
        InstanceCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::InstanceCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn application_info(mut self, application_info: &'a crate::vk1_0::ApplicationInfo) -> Self {
        self.0.p_application_info = application_info as _;
        self
    }
    #[inline]
    pub fn enabled_layer_names(
        mut self,
        enabled_layer_names: &'a [*const std::os::raw::c_char],
    ) -> Self {
        self.0.pp_enabled_layer_names = enabled_layer_names.as_ptr() as _;
        self.0.enabled_layer_count = enabled_layer_names.len() as _;
        self
    }
    #[inline]
    pub fn enabled_extension_names(
        mut self,
        enabled_extension_names: &'a [*const std::os::raw::c_char],
    ) -> Self {
        self.0.pp_enabled_extension_names = enabled_extension_names.as_ptr() as _;
        self.0.enabled_extension_count = enabled_extension_names.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> InstanceCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for InstanceCreateInfoBuilder<'a> {
    fn default() -> InstanceCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for InstanceCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for InstanceCreateInfoBuilder<'a> {
    type Target = InstanceCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for InstanceCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueueFamilyProperties.html) · Structure"]
#[doc(alias = "VkQueueFamilyProperties")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct QueueFamilyProperties {
    pub queue_flags: crate::vk1_0::QueueFlags,
    pub queue_count: u32,
    pub timestamp_valid_bits: u32,
    pub min_image_transfer_granularity: crate::vk1_0::Extent3D,
}
impl Default for QueueFamilyProperties {
    fn default() -> Self {
        Self {
            queue_flags: Default::default(),
            queue_count: Default::default(),
            timestamp_valid_bits: Default::default(),
            min_image_transfer_granularity: Default::default(),
        }
    }
}
impl std::fmt::Debug for QueueFamilyProperties {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("QueueFamilyProperties")
            .field("queue_flags", &self.queue_flags)
            .field("queue_count", &self.queue_count)
            .field("timestamp_valid_bits", &self.timestamp_valid_bits)
            .field(
                "min_image_transfer_granularity",
                &self.min_image_transfer_granularity,
            )
            .finish()
    }
}
impl QueueFamilyProperties {
    #[inline]
    pub fn into_builder<'a>(self) -> QueueFamilyPropertiesBuilder<'a> {
        QueueFamilyPropertiesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueueFamilyProperties.html) · Builder of [`QueueFamilyProperties`]"]
#[repr(transparent)]
pub struct QueueFamilyPropertiesBuilder<'a>(
    QueueFamilyProperties,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> QueueFamilyPropertiesBuilder<'a> {
    #[inline]
    pub fn new() -> QueueFamilyPropertiesBuilder<'a> {
        QueueFamilyPropertiesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn queue_flags(mut self, queue_flags: crate::vk1_0::QueueFlags) -> Self {
        self.0.queue_flags = queue_flags as _;
        self
    }
    #[inline]
    pub fn queue_count(mut self, queue_count: u32) -> Self {
        self.0.queue_count = queue_count as _;
        self
    }
    #[inline]
    pub fn timestamp_valid_bits(mut self, timestamp_valid_bits: u32) -> Self {
        self.0.timestamp_valid_bits = timestamp_valid_bits as _;
        self
    }
    #[inline]
    pub fn min_image_transfer_granularity(
        mut self,
        min_image_transfer_granularity: crate::vk1_0::Extent3D,
    ) -> Self {
        self.0.min_image_transfer_granularity = min_image_transfer_granularity as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> QueueFamilyProperties {
        self.0
    }
}
impl<'a> std::default::Default for QueueFamilyPropertiesBuilder<'a> {
    fn default() -> QueueFamilyPropertiesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for QueueFamilyPropertiesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for QueueFamilyPropertiesBuilder<'a> {
    type Target = QueueFamilyProperties;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for QueueFamilyPropertiesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceMemoryProperties.html) · Structure"]
#[doc(alias = "VkPhysicalDeviceMemoryProperties")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PhysicalDeviceMemoryProperties {
    pub memory_type_count: u32,
    pub memory_types: [crate::vk1_0::MemoryType; 32],
    pub memory_heap_count: u32,
    pub memory_heaps: [crate::vk1_0::MemoryHeap; 16],
}
impl Default for PhysicalDeviceMemoryProperties {
    fn default() -> Self {
        Self {
            memory_type_count: Default::default(),
            memory_types: unsafe { std::mem::zeroed() },
            memory_heap_count: Default::default(),
            memory_heaps: unsafe { std::mem::zeroed() },
        }
    }
}
impl std::fmt::Debug for PhysicalDeviceMemoryProperties {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PhysicalDeviceMemoryProperties")
            .field("memory_type_count", &self.memory_type_count)
            .field("memory_types", &self.memory_types)
            .field("memory_heap_count", &self.memory_heap_count)
            .field("memory_heaps", &self.memory_heaps)
            .finish()
    }
}
impl PhysicalDeviceMemoryProperties {
    #[inline]
    pub fn into_builder<'a>(self) -> PhysicalDeviceMemoryPropertiesBuilder<'a> {
        PhysicalDeviceMemoryPropertiesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceMemoryProperties.html) · Builder of [`PhysicalDeviceMemoryProperties`]"]
#[repr(transparent)]
pub struct PhysicalDeviceMemoryPropertiesBuilder<'a>(
    PhysicalDeviceMemoryProperties,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PhysicalDeviceMemoryPropertiesBuilder<'a> {
    #[inline]
    pub fn new() -> PhysicalDeviceMemoryPropertiesBuilder<'a> {
        PhysicalDeviceMemoryPropertiesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn memory_type_count(mut self, memory_type_count: u32) -> Self {
        self.0.memory_type_count = memory_type_count as _;
        self
    }
    #[inline]
    pub fn memory_types(mut self, memory_types: [crate::vk1_0::MemoryType; 32]) -> Self {
        self.0.memory_types = memory_types as _;
        self
    }
    #[inline]
    pub fn memory_heap_count(mut self, memory_heap_count: u32) -> Self {
        self.0.memory_heap_count = memory_heap_count as _;
        self
    }
    #[inline]
    pub fn memory_heaps(mut self, memory_heaps: [crate::vk1_0::MemoryHeap; 16]) -> Self {
        self.0.memory_heaps = memory_heaps as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PhysicalDeviceMemoryProperties {
        self.0
    }
}
impl<'a> std::default::Default for PhysicalDeviceMemoryPropertiesBuilder<'a> {
    fn default() -> PhysicalDeviceMemoryPropertiesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PhysicalDeviceMemoryPropertiesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PhysicalDeviceMemoryPropertiesBuilder<'a> {
    type Target = PhysicalDeviceMemoryProperties;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PhysicalDeviceMemoryPropertiesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryAllocateInfo.html) · Structure"]
#[doc(alias = "VkMemoryAllocateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct MemoryAllocateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub allocation_size: crate::vk1_0::DeviceSize,
    pub memory_type_index: u32,
}
impl Default for MemoryAllocateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::MEMORY_ALLOCATE_INFO,
            p_next: std::ptr::null(),
            allocation_size: Default::default(),
            memory_type_index: Default::default(),
        }
    }
}
impl std::fmt::Debug for MemoryAllocateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("MemoryAllocateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("allocation_size", &self.allocation_size)
            .field("memory_type_index", &self.memory_type_index)
            .finish()
    }
}
impl MemoryAllocateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> MemoryAllocateInfoBuilder<'a> {
        MemoryAllocateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_dedicated_allocation::DedicatedAllocationMemoryAllocateInfoNV,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_dedicated_allocation::DedicatedAllocationMemoryAllocateInfoNVBuilder<
            '_,
        >,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::extensions::nv_external_memory::ExportMemoryAllocateInfoNV>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_external_memory::ExportMemoryAllocateInfoNVBuilder<'_>,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_external_memory_win32::ImportMemoryWin32HandleInfoNV,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_external_memory_win32::ImportMemoryWin32HandleInfoNVBuilder<'_>,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_external_memory_win32::ExportMemoryWin32HandleInfoNV,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_external_memory_win32::ExportMemoryWin32HandleInfoNVBuilder<'_>,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExportMemoryAllocateInfo>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExportMemoryAllocateInfoBuilder<'_>>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_memory_win32::ImportMemoryWin32HandleInfoKHR,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_memory_win32::ImportMemoryWin32HandleInfoKHRBuilder<'_>,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_memory_win32::ExportMemoryWin32HandleInfoKHR,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_memory_win32::ExportMemoryWin32HandleInfoKHRBuilder<'_>,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::extensions::khr_external_memory_fd::ImportMemoryFdInfoKHR>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_memory_fd::ImportMemoryFdInfoKHRBuilder<'_>,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::MemoryAllocateFlagsInfo>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::MemoryAllocateFlagsInfoBuilder<'_>>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::MemoryDedicatedAllocateInfo>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::MemoryDedicatedAllocateInfoBuilder<'_>>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_external_memory_host::ImportMemoryHostPointerInfoEXT,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_external_memory_host::ImportMemoryHostPointerInfoEXTBuilder<'_>,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: android_external_memory_android_hardware_buffer :: ImportAndroidHardwareBufferInfoANDROID > for MemoryAllocateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: android_external_memory_android_hardware_buffer :: ImportAndroidHardwareBufferInfoANDROIDBuilder < '_ >> for MemoryAllocateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<'a, crate::extensions::ext_memory_priority::MemoryPriorityAllocateInfoEXT>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_memory_priority::MemoryPriorityAllocateInfoEXTBuilder<'_>,
    > for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::MemoryOpaqueCaptureAddressAllocateInfo>
    for MemoryAllocateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::MemoryOpaqueCaptureAddressAllocateInfoBuilder<'_>>
    for MemoryAllocateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryAllocateInfo.html) · Builder of [`MemoryAllocateInfo`]"]
#[repr(transparent)]
pub struct MemoryAllocateInfoBuilder<'a>(MemoryAllocateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> MemoryAllocateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> MemoryAllocateInfoBuilder<'a> {
        MemoryAllocateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn allocation_size(mut self, allocation_size: crate::vk1_0::DeviceSize) -> Self {
        self.0.allocation_size = allocation_size as _;
        self
    }
    #[inline]
    pub fn memory_type_index(mut self, memory_type_index: u32) -> Self {
        self.0.memory_type_index = memory_type_index as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> MemoryAllocateInfo {
        self.0
    }
}
impl<'a> std::default::Default for MemoryAllocateInfoBuilder<'a> {
    fn default() -> MemoryAllocateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for MemoryAllocateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for MemoryAllocateInfoBuilder<'a> {
    type Target = MemoryAllocateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for MemoryAllocateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryRequirements.html) · Structure"]
#[doc(alias = "VkMemoryRequirements")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct MemoryRequirements {
    pub size: crate::vk1_0::DeviceSize,
    pub alignment: crate::vk1_0::DeviceSize,
    pub memory_type_bits: u32,
}
impl Default for MemoryRequirements {
    fn default() -> Self {
        Self {
            size: Default::default(),
            alignment: Default::default(),
            memory_type_bits: Default::default(),
        }
    }
}
impl std::fmt::Debug for MemoryRequirements {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("MemoryRequirements")
            .field("size", &self.size)
            .field("alignment", &self.alignment)
            .field("memory_type_bits", &self.memory_type_bits)
            .finish()
    }
}
impl MemoryRequirements {
    #[inline]
    pub fn into_builder<'a>(self) -> MemoryRequirementsBuilder<'a> {
        MemoryRequirementsBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryRequirements.html) · Builder of [`MemoryRequirements`]"]
#[repr(transparent)]
pub struct MemoryRequirementsBuilder<'a>(MemoryRequirements, std::marker::PhantomData<&'a ()>);
impl<'a> MemoryRequirementsBuilder<'a> {
    #[inline]
    pub fn new() -> MemoryRequirementsBuilder<'a> {
        MemoryRequirementsBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn size(mut self, size: crate::vk1_0::DeviceSize) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    pub fn alignment(mut self, alignment: crate::vk1_0::DeviceSize) -> Self {
        self.0.alignment = alignment as _;
        self
    }
    #[inline]
    pub fn memory_type_bits(mut self, memory_type_bits: u32) -> Self {
        self.0.memory_type_bits = memory_type_bits as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> MemoryRequirements {
        self.0
    }
}
impl<'a> std::default::Default for MemoryRequirementsBuilder<'a> {
    fn default() -> MemoryRequirementsBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for MemoryRequirementsBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for MemoryRequirementsBuilder<'a> {
    type Target = MemoryRequirements;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for MemoryRequirementsBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageFormatProperties.html) · Structure"]
#[doc(alias = "VkSparseImageFormatProperties")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SparseImageFormatProperties {
    pub aspect_mask: crate::vk1_0::ImageAspectFlags,
    pub image_granularity: crate::vk1_0::Extent3D,
    pub flags: crate::vk1_0::SparseImageFormatFlags,
}
impl Default for SparseImageFormatProperties {
    fn default() -> Self {
        Self {
            aspect_mask: Default::default(),
            image_granularity: Default::default(),
            flags: Default::default(),
        }
    }
}
impl std::fmt::Debug for SparseImageFormatProperties {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SparseImageFormatProperties")
            .field("aspect_mask", &self.aspect_mask)
            .field("image_granularity", &self.image_granularity)
            .field("flags", &self.flags)
            .finish()
    }
}
impl SparseImageFormatProperties {
    #[inline]
    pub fn into_builder<'a>(self) -> SparseImageFormatPropertiesBuilder<'a> {
        SparseImageFormatPropertiesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageFormatProperties.html) · Builder of [`SparseImageFormatProperties`]"]
#[repr(transparent)]
pub struct SparseImageFormatPropertiesBuilder<'a>(
    SparseImageFormatProperties,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> SparseImageFormatPropertiesBuilder<'a> {
    #[inline]
    pub fn new() -> SparseImageFormatPropertiesBuilder<'a> {
        SparseImageFormatPropertiesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn aspect_mask(mut self, aspect_mask: crate::vk1_0::ImageAspectFlags) -> Self {
        self.0.aspect_mask = aspect_mask as _;
        self
    }
    #[inline]
    pub fn image_granularity(mut self, image_granularity: crate::vk1_0::Extent3D) -> Self {
        self.0.image_granularity = image_granularity as _;
        self
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::SparseImageFormatFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SparseImageFormatProperties {
        self.0
    }
}
impl<'a> std::default::Default for SparseImageFormatPropertiesBuilder<'a> {
    fn default() -> SparseImageFormatPropertiesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SparseImageFormatPropertiesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SparseImageFormatPropertiesBuilder<'a> {
    type Target = SparseImageFormatProperties;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SparseImageFormatPropertiesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageMemoryRequirements.html) · Structure"]
#[doc(alias = "VkSparseImageMemoryRequirements")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SparseImageMemoryRequirements {
    pub format_properties: crate::vk1_0::SparseImageFormatProperties,
    pub image_mip_tail_first_lod: u32,
    pub image_mip_tail_size: crate::vk1_0::DeviceSize,
    pub image_mip_tail_offset: crate::vk1_0::DeviceSize,
    pub image_mip_tail_stride: crate::vk1_0::DeviceSize,
}
impl Default for SparseImageMemoryRequirements {
    fn default() -> Self {
        Self {
            format_properties: Default::default(),
            image_mip_tail_first_lod: Default::default(),
            image_mip_tail_size: Default::default(),
            image_mip_tail_offset: Default::default(),
            image_mip_tail_stride: Default::default(),
        }
    }
}
impl std::fmt::Debug for SparseImageMemoryRequirements {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SparseImageMemoryRequirements")
            .field("format_properties", &self.format_properties)
            .field("image_mip_tail_first_lod", &self.image_mip_tail_first_lod)
            .field("image_mip_tail_size", &self.image_mip_tail_size)
            .field("image_mip_tail_offset", &self.image_mip_tail_offset)
            .field("image_mip_tail_stride", &self.image_mip_tail_stride)
            .finish()
    }
}
impl SparseImageMemoryRequirements {
    #[inline]
    pub fn into_builder<'a>(self) -> SparseImageMemoryRequirementsBuilder<'a> {
        SparseImageMemoryRequirementsBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageMemoryRequirements.html) · Builder of [`SparseImageMemoryRequirements`]"]
#[repr(transparent)]
pub struct SparseImageMemoryRequirementsBuilder<'a>(
    SparseImageMemoryRequirements,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> SparseImageMemoryRequirementsBuilder<'a> {
    #[inline]
    pub fn new() -> SparseImageMemoryRequirementsBuilder<'a> {
        SparseImageMemoryRequirementsBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn format_properties(
        mut self,
        format_properties: crate::vk1_0::SparseImageFormatProperties,
    ) -> Self {
        self.0.format_properties = format_properties as _;
        self
    }
    #[inline]
    pub fn image_mip_tail_first_lod(mut self, image_mip_tail_first_lod: u32) -> Self {
        self.0.image_mip_tail_first_lod = image_mip_tail_first_lod as _;
        self
    }
    #[inline]
    pub fn image_mip_tail_size(mut self, image_mip_tail_size: crate::vk1_0::DeviceSize) -> Self {
        self.0.image_mip_tail_size = image_mip_tail_size as _;
        self
    }
    #[inline]
    pub fn image_mip_tail_offset(
        mut self,
        image_mip_tail_offset: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.image_mip_tail_offset = image_mip_tail_offset as _;
        self
    }
    #[inline]
    pub fn image_mip_tail_stride(
        mut self,
        image_mip_tail_stride: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.image_mip_tail_stride = image_mip_tail_stride as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SparseImageMemoryRequirements {
        self.0
    }
}
impl<'a> std::default::Default for SparseImageMemoryRequirementsBuilder<'a> {
    fn default() -> SparseImageMemoryRequirementsBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SparseImageMemoryRequirementsBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SparseImageMemoryRequirementsBuilder<'a> {
    type Target = SparseImageMemoryRequirements;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SparseImageMemoryRequirementsBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryType.html) · Structure"]
#[doc(alias = "VkMemoryType")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct MemoryType {
    pub property_flags: crate::vk1_0::MemoryPropertyFlags,
    pub heap_index: u32,
}
impl Default for MemoryType {
    fn default() -> Self {
        Self {
            property_flags: Default::default(),
            heap_index: Default::default(),
        }
    }
}
impl std::fmt::Debug for MemoryType {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("MemoryType")
            .field("property_flags", &self.property_flags)
            .field("heap_index", &self.heap_index)
            .finish()
    }
}
impl MemoryType {
    #[inline]
    pub fn into_builder<'a>(self) -> MemoryTypeBuilder<'a> {
        MemoryTypeBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryType.html) · Builder of [`MemoryType`]"]
#[repr(transparent)]
pub struct MemoryTypeBuilder<'a>(MemoryType, std::marker::PhantomData<&'a ()>);
impl<'a> MemoryTypeBuilder<'a> {
    #[inline]
    pub fn new() -> MemoryTypeBuilder<'a> {
        MemoryTypeBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn property_flags(mut self, property_flags: crate::vk1_0::MemoryPropertyFlags) -> Self {
        self.0.property_flags = property_flags as _;
        self
    }
    #[inline]
    pub fn heap_index(mut self, heap_index: u32) -> Self {
        self.0.heap_index = heap_index as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> MemoryType {
        self.0
    }
}
impl<'a> std::default::Default for MemoryTypeBuilder<'a> {
    fn default() -> MemoryTypeBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for MemoryTypeBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for MemoryTypeBuilder<'a> {
    type Target = MemoryType;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for MemoryTypeBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryHeap.html) · Structure"]
#[doc(alias = "VkMemoryHeap")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct MemoryHeap {
    pub size: crate::vk1_0::DeviceSize,
    pub flags: crate::vk1_0::MemoryHeapFlags,
}
impl Default for MemoryHeap {
    fn default() -> Self {
        Self {
            size: Default::default(),
            flags: Default::default(),
        }
    }
}
impl std::fmt::Debug for MemoryHeap {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("MemoryHeap")
            .field("size", &self.size)
            .field("flags", &self.flags)
            .finish()
    }
}
impl MemoryHeap {
    #[inline]
    pub fn into_builder<'a>(self) -> MemoryHeapBuilder<'a> {
        MemoryHeapBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryHeap.html) · Builder of [`MemoryHeap`]"]
#[repr(transparent)]
pub struct MemoryHeapBuilder<'a>(MemoryHeap, std::marker::PhantomData<&'a ()>);
impl<'a> MemoryHeapBuilder<'a> {
    #[inline]
    pub fn new() -> MemoryHeapBuilder<'a> {
        MemoryHeapBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn size(mut self, size: crate::vk1_0::DeviceSize) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::MemoryHeapFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> MemoryHeap {
        self.0
    }
}
impl<'a> std::default::Default for MemoryHeapBuilder<'a> {
    fn default() -> MemoryHeapBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for MemoryHeapBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for MemoryHeapBuilder<'a> {
    type Target = MemoryHeap;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for MemoryHeapBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMappedMemoryRange.html) · Structure"]
#[doc(alias = "VkMappedMemoryRange")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct MappedMemoryRange {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub memory: crate::vk1_0::DeviceMemory,
    pub offset: crate::vk1_0::DeviceSize,
    pub size: crate::vk1_0::DeviceSize,
}
impl Default for MappedMemoryRange {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::MAPPED_MEMORY_RANGE,
            p_next: std::ptr::null(),
            memory: Default::default(),
            offset: Default::default(),
            size: Default::default(),
        }
    }
}
impl std::fmt::Debug for MappedMemoryRange {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("MappedMemoryRange")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("memory", &self.memory)
            .field("offset", &self.offset)
            .field("size", &self.size)
            .finish()
    }
}
impl MappedMemoryRange {
    #[inline]
    pub fn into_builder<'a>(self) -> MappedMemoryRangeBuilder<'a> {
        MappedMemoryRangeBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMappedMemoryRange.html) · Builder of [`MappedMemoryRange`]"]
#[repr(transparent)]
pub struct MappedMemoryRangeBuilder<'a>(MappedMemoryRange, std::marker::PhantomData<&'a ()>);
impl<'a> MappedMemoryRangeBuilder<'a> {
    #[inline]
    pub fn new() -> MappedMemoryRangeBuilder<'a> {
        MappedMemoryRangeBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn memory(mut self, memory: crate::vk1_0::DeviceMemory) -> Self {
        self.0.memory = memory as _;
        self
    }
    #[inline]
    pub fn offset(mut self, offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    pub fn size(mut self, size: crate::vk1_0::DeviceSize) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> MappedMemoryRange {
        self.0
    }
}
impl<'a> std::default::Default for MappedMemoryRangeBuilder<'a> {
    fn default() -> MappedMemoryRangeBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for MappedMemoryRangeBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for MappedMemoryRangeBuilder<'a> {
    type Target = MappedMemoryRange;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for MappedMemoryRangeBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormatProperties.html) · Structure"]
#[doc(alias = "VkFormatProperties")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct FormatProperties {
    pub linear_tiling_features: crate::vk1_0::FormatFeatureFlags,
    pub optimal_tiling_features: crate::vk1_0::FormatFeatureFlags,
    pub buffer_features: crate::vk1_0::FormatFeatureFlags,
}
impl Default for FormatProperties {
    fn default() -> Self {
        Self {
            linear_tiling_features: Default::default(),
            optimal_tiling_features: Default::default(),
            buffer_features: Default::default(),
        }
    }
}
impl std::fmt::Debug for FormatProperties {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("FormatProperties")
            .field("linear_tiling_features", &self.linear_tiling_features)
            .field("optimal_tiling_features", &self.optimal_tiling_features)
            .field("buffer_features", &self.buffer_features)
            .finish()
    }
}
impl FormatProperties {
    #[inline]
    pub fn into_builder<'a>(self) -> FormatPropertiesBuilder<'a> {
        FormatPropertiesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormatProperties.html) · Builder of [`FormatProperties`]"]
#[repr(transparent)]
pub struct FormatPropertiesBuilder<'a>(FormatProperties, std::marker::PhantomData<&'a ()>);
impl<'a> FormatPropertiesBuilder<'a> {
    #[inline]
    pub fn new() -> FormatPropertiesBuilder<'a> {
        FormatPropertiesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn linear_tiling_features(
        mut self,
        linear_tiling_features: crate::vk1_0::FormatFeatureFlags,
    ) -> Self {
        self.0.linear_tiling_features = linear_tiling_features as _;
        self
    }
    #[inline]
    pub fn optimal_tiling_features(
        mut self,
        optimal_tiling_features: crate::vk1_0::FormatFeatureFlags,
    ) -> Self {
        self.0.optimal_tiling_features = optimal_tiling_features as _;
        self
    }
    #[inline]
    pub fn buffer_features(mut self, buffer_features: crate::vk1_0::FormatFeatureFlags) -> Self {
        self.0.buffer_features = buffer_features as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> FormatProperties {
        self.0
    }
}
impl<'a> std::default::Default for FormatPropertiesBuilder<'a> {
    fn default() -> FormatPropertiesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for FormatPropertiesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for FormatPropertiesBuilder<'a> {
    type Target = FormatProperties;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for FormatPropertiesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageFormatProperties.html) · Structure"]
#[doc(alias = "VkImageFormatProperties")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageFormatProperties {
    pub max_extent: crate::vk1_0::Extent3D,
    pub max_mip_levels: u32,
    pub max_array_layers: u32,
    pub sample_counts: crate::vk1_0::SampleCountFlags,
    pub max_resource_size: crate::vk1_0::DeviceSize,
}
impl Default for ImageFormatProperties {
    fn default() -> Self {
        Self {
            max_extent: Default::default(),
            max_mip_levels: Default::default(),
            max_array_layers: Default::default(),
            sample_counts: Default::default(),
            max_resource_size: Default::default(),
        }
    }
}
impl std::fmt::Debug for ImageFormatProperties {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageFormatProperties")
            .field("max_extent", &self.max_extent)
            .field("max_mip_levels", &self.max_mip_levels)
            .field("max_array_layers", &self.max_array_layers)
            .field("sample_counts", &self.sample_counts)
            .field("max_resource_size", &self.max_resource_size)
            .finish()
    }
}
impl ImageFormatProperties {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageFormatPropertiesBuilder<'a> {
        ImageFormatPropertiesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageFormatProperties.html) · Builder of [`ImageFormatProperties`]"]
#[repr(transparent)]
pub struct ImageFormatPropertiesBuilder<'a>(
    ImageFormatProperties,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> ImageFormatPropertiesBuilder<'a> {
    #[inline]
    pub fn new() -> ImageFormatPropertiesBuilder<'a> {
        ImageFormatPropertiesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn max_extent(mut self, max_extent: crate::vk1_0::Extent3D) -> Self {
        self.0.max_extent = max_extent as _;
        self
    }
    #[inline]
    pub fn max_mip_levels(mut self, max_mip_levels: u32) -> Self {
        self.0.max_mip_levels = max_mip_levels as _;
        self
    }
    #[inline]
    pub fn max_array_layers(mut self, max_array_layers: u32) -> Self {
        self.0.max_array_layers = max_array_layers as _;
        self
    }
    #[inline]
    pub fn sample_counts(mut self, sample_counts: crate::vk1_0::SampleCountFlags) -> Self {
        self.0.sample_counts = sample_counts as _;
        self
    }
    #[inline]
    pub fn max_resource_size(mut self, max_resource_size: crate::vk1_0::DeviceSize) -> Self {
        self.0.max_resource_size = max_resource_size as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageFormatProperties {
        self.0
    }
}
impl<'a> std::default::Default for ImageFormatPropertiesBuilder<'a> {
    fn default() -> ImageFormatPropertiesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageFormatPropertiesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageFormatPropertiesBuilder<'a> {
    type Target = ImageFormatProperties;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageFormatPropertiesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorBufferInfo.html) · Structure"]
#[doc(alias = "VkDescriptorBufferInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DescriptorBufferInfo {
    pub buffer: crate::vk1_0::Buffer,
    pub offset: crate::vk1_0::DeviceSize,
    pub range: crate::vk1_0::DeviceSize,
}
impl Default for DescriptorBufferInfo {
    fn default() -> Self {
        Self {
            buffer: Default::default(),
            offset: Default::default(),
            range: Default::default(),
        }
    }
}
impl std::fmt::Debug for DescriptorBufferInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DescriptorBufferInfo")
            .field("buffer", &self.buffer)
            .field("offset", &self.offset)
            .field("range", &self.range)
            .finish()
    }
}
impl DescriptorBufferInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> DescriptorBufferInfoBuilder<'a> {
        DescriptorBufferInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorBufferInfo.html) · Builder of [`DescriptorBufferInfo`]"]
#[repr(transparent)]
pub struct DescriptorBufferInfoBuilder<'a>(DescriptorBufferInfo, std::marker::PhantomData<&'a ()>);
impl<'a> DescriptorBufferInfoBuilder<'a> {
    #[inline]
    pub fn new() -> DescriptorBufferInfoBuilder<'a> {
        DescriptorBufferInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn buffer(mut self, buffer: crate::vk1_0::Buffer) -> Self {
        self.0.buffer = buffer as _;
        self
    }
    #[inline]
    pub fn offset(mut self, offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    pub fn range(mut self, range: crate::vk1_0::DeviceSize) -> Self {
        self.0.range = range as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DescriptorBufferInfo {
        self.0
    }
}
impl<'a> std::default::Default for DescriptorBufferInfoBuilder<'a> {
    fn default() -> DescriptorBufferInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DescriptorBufferInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DescriptorBufferInfoBuilder<'a> {
    type Target = DescriptorBufferInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DescriptorBufferInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorImageInfo.html) · Structure"]
#[doc(alias = "VkDescriptorImageInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DescriptorImageInfo {
    pub sampler: crate::vk1_0::Sampler,
    pub image_view: crate::vk1_0::ImageView,
    pub image_layout: crate::vk1_0::ImageLayout,
}
impl Default for DescriptorImageInfo {
    fn default() -> Self {
        Self {
            sampler: Default::default(),
            image_view: Default::default(),
            image_layout: Default::default(),
        }
    }
}
impl std::fmt::Debug for DescriptorImageInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DescriptorImageInfo")
            .field("sampler", &self.sampler)
            .field("image_view", &self.image_view)
            .field("image_layout", &self.image_layout)
            .finish()
    }
}
impl DescriptorImageInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> DescriptorImageInfoBuilder<'a> {
        DescriptorImageInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorImageInfo.html) · Builder of [`DescriptorImageInfo`]"]
#[repr(transparent)]
pub struct DescriptorImageInfoBuilder<'a>(DescriptorImageInfo, std::marker::PhantomData<&'a ()>);
impl<'a> DescriptorImageInfoBuilder<'a> {
    #[inline]
    pub fn new() -> DescriptorImageInfoBuilder<'a> {
        DescriptorImageInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn sampler(mut self, sampler: crate::vk1_0::Sampler) -> Self {
        self.0.sampler = sampler as _;
        self
    }
    #[inline]
    pub fn image_view(mut self, image_view: crate::vk1_0::ImageView) -> Self {
        self.0.image_view = image_view as _;
        self
    }
    #[inline]
    pub fn image_layout(mut self, image_layout: crate::vk1_0::ImageLayout) -> Self {
        self.0.image_layout = image_layout as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DescriptorImageInfo {
        self.0
    }
}
impl<'a> std::default::Default for DescriptorImageInfoBuilder<'a> {
    fn default() -> DescriptorImageInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DescriptorImageInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DescriptorImageInfoBuilder<'a> {
    type Target = DescriptorImageInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DescriptorImageInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkWriteDescriptorSet.html) · Structure"]
#[doc(alias = "VkWriteDescriptorSet")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct WriteDescriptorSet {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub dst_set: crate::vk1_0::DescriptorSet,
    pub dst_binding: u32,
    pub dst_array_element: u32,
    pub descriptor_count: u32,
    pub descriptor_type: crate::vk1_0::DescriptorType,
    pub p_image_info: *const crate::vk1_0::DescriptorImageInfo,
    pub p_buffer_info: *const crate::vk1_0::DescriptorBufferInfo,
    pub p_texel_buffer_view: *const crate::vk1_0::BufferView,
}
impl Default for WriteDescriptorSet {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::WRITE_DESCRIPTOR_SET,
            p_next: std::ptr::null(),
            dst_set: Default::default(),
            dst_binding: Default::default(),
            dst_array_element: Default::default(),
            descriptor_count: Default::default(),
            descriptor_type: Default::default(),
            p_image_info: std::ptr::null(),
            p_buffer_info: std::ptr::null(),
            p_texel_buffer_view: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for WriteDescriptorSet {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("WriteDescriptorSet")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("dst_set", &self.dst_set)
            .field("dst_binding", &self.dst_binding)
            .field("dst_array_element", &self.dst_array_element)
            .field("descriptor_count", &self.descriptor_count)
            .field("descriptor_type", &self.descriptor_type)
            .field("p_image_info", &self.p_image_info)
            .field("p_buffer_info", &self.p_buffer_info)
            .field("p_texel_buffer_view", &self.p_texel_buffer_view)
            .finish()
    }
}
impl WriteDescriptorSet {
    #[inline]
    pub fn into_builder<'a>(self) -> WriteDescriptorSetBuilder<'a> {
        WriteDescriptorSetBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_inline_uniform_block::WriteDescriptorSetInlineUniformBlockEXT,
    > for WriteDescriptorSetBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_inline_uniform_block::WriteDescriptorSetInlineUniformBlockEXTBuilder<
            '_,
        >,
    > for WriteDescriptorSetBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_acceleration_structure::WriteDescriptorSetAccelerationStructureKHR,
    > for WriteDescriptorSetBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_acceleration_structure :: WriteDescriptorSetAccelerationStructureKHRBuilder < '_ >> for WriteDescriptorSetBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_ray_tracing::WriteDescriptorSetAccelerationStructureNV,
    > for WriteDescriptorSetBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_ray_tracing::WriteDescriptorSetAccelerationStructureNVBuilder<'_>,
    > for WriteDescriptorSetBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkWriteDescriptorSet.html) · Builder of [`WriteDescriptorSet`]"]
#[repr(transparent)]
pub struct WriteDescriptorSetBuilder<'a>(WriteDescriptorSet, std::marker::PhantomData<&'a ()>);
impl<'a> WriteDescriptorSetBuilder<'a> {
    #[inline]
    pub fn new() -> WriteDescriptorSetBuilder<'a> {
        WriteDescriptorSetBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn dst_set(mut self, dst_set: crate::vk1_0::DescriptorSet) -> Self {
        self.0.dst_set = dst_set as _;
        self
    }
    #[inline]
    pub fn dst_binding(mut self, dst_binding: u32) -> Self {
        self.0.dst_binding = dst_binding as _;
        self
    }
    #[inline]
    pub fn dst_array_element(mut self, dst_array_element: u32) -> Self {
        self.0.dst_array_element = dst_array_element as _;
        self
    }
    #[inline]
    pub fn descriptor_type(mut self, descriptor_type: crate::vk1_0::DescriptorType) -> Self {
        self.0.descriptor_type = descriptor_type as _;
        self
    }
    #[inline]
    pub fn image_info(
        mut self,
        image_info: &'a [crate::vk1_0::DescriptorImageInfoBuilder],
    ) -> Self {
        self.0.p_image_info = image_info.as_ptr() as _;
        self.0.descriptor_count = image_info.len() as _;
        self
    }
    #[inline]
    pub fn buffer_info(
        mut self,
        buffer_info: &'a [crate::vk1_0::DescriptorBufferInfoBuilder],
    ) -> Self {
        self.0.p_buffer_info = buffer_info.as_ptr() as _;
        self.0.descriptor_count = buffer_info.len() as _;
        self
    }
    #[inline]
    pub fn texel_buffer_view(mut self, texel_buffer_view: &'a [crate::vk1_0::BufferView]) -> Self {
        self.0.p_texel_buffer_view = texel_buffer_view.as_ptr() as _;
        self.0.descriptor_count = texel_buffer_view.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> WriteDescriptorSet {
        self.0
    }
}
impl<'a> std::default::Default for WriteDescriptorSetBuilder<'a> {
    fn default() -> WriteDescriptorSetBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for WriteDescriptorSetBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for WriteDescriptorSetBuilder<'a> {
    type Target = WriteDescriptorSet;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for WriteDescriptorSetBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCopyDescriptorSet.html) · Structure"]
#[doc(alias = "VkCopyDescriptorSet")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct CopyDescriptorSet {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub src_set: crate::vk1_0::DescriptorSet,
    pub src_binding: u32,
    pub src_array_element: u32,
    pub dst_set: crate::vk1_0::DescriptorSet,
    pub dst_binding: u32,
    pub dst_array_element: u32,
    pub descriptor_count: u32,
}
impl Default for CopyDescriptorSet {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::COPY_DESCRIPTOR_SET,
            p_next: std::ptr::null(),
            src_set: Default::default(),
            src_binding: Default::default(),
            src_array_element: Default::default(),
            dst_set: Default::default(),
            dst_binding: Default::default(),
            dst_array_element: Default::default(),
            descriptor_count: Default::default(),
        }
    }
}
impl std::fmt::Debug for CopyDescriptorSet {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("CopyDescriptorSet")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("src_set", &self.src_set)
            .field("src_binding", &self.src_binding)
            .field("src_array_element", &self.src_array_element)
            .field("dst_set", &self.dst_set)
            .field("dst_binding", &self.dst_binding)
            .field("dst_array_element", &self.dst_array_element)
            .field("descriptor_count", &self.descriptor_count)
            .finish()
    }
}
impl CopyDescriptorSet {
    #[inline]
    pub fn into_builder<'a>(self) -> CopyDescriptorSetBuilder<'a> {
        CopyDescriptorSetBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCopyDescriptorSet.html) · Builder of [`CopyDescriptorSet`]"]
#[repr(transparent)]
pub struct CopyDescriptorSetBuilder<'a>(CopyDescriptorSet, std::marker::PhantomData<&'a ()>);
impl<'a> CopyDescriptorSetBuilder<'a> {
    #[inline]
    pub fn new() -> CopyDescriptorSetBuilder<'a> {
        CopyDescriptorSetBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn src_set(mut self, src_set: crate::vk1_0::DescriptorSet) -> Self {
        self.0.src_set = src_set as _;
        self
    }
    #[inline]
    pub fn src_binding(mut self, src_binding: u32) -> Self {
        self.0.src_binding = src_binding as _;
        self
    }
    #[inline]
    pub fn src_array_element(mut self, src_array_element: u32) -> Self {
        self.0.src_array_element = src_array_element as _;
        self
    }
    #[inline]
    pub fn dst_set(mut self, dst_set: crate::vk1_0::DescriptorSet) -> Self {
        self.0.dst_set = dst_set as _;
        self
    }
    #[inline]
    pub fn dst_binding(mut self, dst_binding: u32) -> Self {
        self.0.dst_binding = dst_binding as _;
        self
    }
    #[inline]
    pub fn dst_array_element(mut self, dst_array_element: u32) -> Self {
        self.0.dst_array_element = dst_array_element as _;
        self
    }
    #[inline]
    pub fn descriptor_count(mut self, descriptor_count: u32) -> Self {
        self.0.descriptor_count = descriptor_count as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> CopyDescriptorSet {
        self.0
    }
}
impl<'a> std::default::Default for CopyDescriptorSetBuilder<'a> {
    fn default() -> CopyDescriptorSetBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for CopyDescriptorSetBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for CopyDescriptorSetBuilder<'a> {
    type Target = CopyDescriptorSet;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for CopyDescriptorSetBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferCreateInfo.html) · Structure"]
#[doc(alias = "VkBufferCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct BufferCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::BufferCreateFlags,
    pub size: crate::vk1_0::DeviceSize,
    pub usage: crate::vk1_0::BufferUsageFlags,
    pub sharing_mode: crate::vk1_0::SharingMode,
    pub queue_family_index_count: u32,
    pub p_queue_family_indices: *const u32,
}
impl Default for BufferCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::BUFFER_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            size: Default::default(),
            usage: Default::default(),
            sharing_mode: Default::default(),
            queue_family_index_count: Default::default(),
            p_queue_family_indices: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for BufferCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("BufferCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("size", &self.size)
            .field("usage", &self.usage)
            .field("sharing_mode", &self.sharing_mode)
            .field("queue_family_index_count", &self.queue_family_index_count)
            .field("p_queue_family_indices", &self.p_queue_family_indices)
            .finish()
    }
}
impl BufferCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> BufferCreateInfoBuilder<'a> {
        BufferCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_dedicated_allocation::DedicatedAllocationBufferCreateInfoNV,
    > for BufferCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_dedicated_allocation::DedicatedAllocationBufferCreateInfoNVBuilder<
            '_,
        >,
    > for BufferCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExternalMemoryBufferCreateInfo>
    for BufferCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExternalMemoryBufferCreateInfoBuilder<'_>>
    for BufferCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::BufferOpaqueCaptureAddressCreateInfo>
    for BufferCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::BufferOpaqueCaptureAddressCreateInfoBuilder<'_>>
    for BufferCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_buffer_device_address::BufferDeviceAddressCreateInfoEXT,
    > for BufferCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_buffer_device_address::BufferDeviceAddressCreateInfoEXTBuilder<'_>,
    > for BufferCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferCreateInfo.html) · Builder of [`BufferCreateInfo`]"]
#[repr(transparent)]
pub struct BufferCreateInfoBuilder<'a>(BufferCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> BufferCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> BufferCreateInfoBuilder<'a> {
        BufferCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::BufferCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn size(mut self, size: crate::vk1_0::DeviceSize) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    pub fn usage(mut self, usage: crate::vk1_0::BufferUsageFlags) -> Self {
        self.0.usage = usage as _;
        self
    }
    #[inline]
    pub fn sharing_mode(mut self, sharing_mode: crate::vk1_0::SharingMode) -> Self {
        self.0.sharing_mode = sharing_mode as _;
        self
    }
    #[inline]
    pub fn queue_family_indices(mut self, queue_family_indices: &'a [u32]) -> Self {
        self.0.p_queue_family_indices = queue_family_indices.as_ptr() as _;
        self.0.queue_family_index_count = queue_family_indices.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> BufferCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for BufferCreateInfoBuilder<'a> {
    fn default() -> BufferCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for BufferCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for BufferCreateInfoBuilder<'a> {
    type Target = BufferCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for BufferCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferViewCreateInfo.html) · Structure"]
#[doc(alias = "VkBufferViewCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct BufferViewCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::BufferViewCreateFlags,
    pub buffer: crate::vk1_0::Buffer,
    pub format: crate::vk1_0::Format,
    pub offset: crate::vk1_0::DeviceSize,
    pub range: crate::vk1_0::DeviceSize,
}
impl Default for BufferViewCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::BUFFER_VIEW_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            buffer: Default::default(),
            format: Default::default(),
            offset: Default::default(),
            range: Default::default(),
        }
    }
}
impl std::fmt::Debug for BufferViewCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("BufferViewCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("buffer", &self.buffer)
            .field("format", &self.format)
            .field("offset", &self.offset)
            .field("range", &self.range)
            .finish()
    }
}
impl BufferViewCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> BufferViewCreateInfoBuilder<'a> {
        BufferViewCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferViewCreateInfo.html) · Builder of [`BufferViewCreateInfo`]"]
#[repr(transparent)]
pub struct BufferViewCreateInfoBuilder<'a>(BufferViewCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> BufferViewCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> BufferViewCreateInfoBuilder<'a> {
        BufferViewCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::BufferViewCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn buffer(mut self, buffer: crate::vk1_0::Buffer) -> Self {
        self.0.buffer = buffer as _;
        self
    }
    #[inline]
    pub fn format(mut self, format: crate::vk1_0::Format) -> Self {
        self.0.format = format as _;
        self
    }
    #[inline]
    pub fn offset(mut self, offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    pub fn range(mut self, range: crate::vk1_0::DeviceSize) -> Self {
        self.0.range = range as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> BufferViewCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for BufferViewCreateInfoBuilder<'a> {
    fn default() -> BufferViewCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for BufferViewCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for BufferViewCreateInfoBuilder<'a> {
    type Target = BufferViewCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for BufferViewCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageSubresource.html) · Structure"]
#[doc(alias = "VkImageSubresource")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageSubresource {
    pub aspect_mask: crate::vk1_0::ImageAspectFlags,
    pub mip_level: u32,
    pub array_layer: u32,
}
impl Default for ImageSubresource {
    fn default() -> Self {
        Self {
            aspect_mask: Default::default(),
            mip_level: Default::default(),
            array_layer: Default::default(),
        }
    }
}
impl std::fmt::Debug for ImageSubresource {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageSubresource")
            .field("aspect_mask", &self.aspect_mask)
            .field("mip_level", &self.mip_level)
            .field("array_layer", &self.array_layer)
            .finish()
    }
}
impl ImageSubresource {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageSubresourceBuilder<'a> {
        ImageSubresourceBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageSubresource.html) · Builder of [`ImageSubresource`]"]
#[repr(transparent)]
pub struct ImageSubresourceBuilder<'a>(ImageSubresource, std::marker::PhantomData<&'a ()>);
impl<'a> ImageSubresourceBuilder<'a> {
    #[inline]
    pub fn new() -> ImageSubresourceBuilder<'a> {
        ImageSubresourceBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn aspect_mask(mut self, aspect_mask: crate::vk1_0::ImageAspectFlags) -> Self {
        self.0.aspect_mask = aspect_mask as _;
        self
    }
    #[inline]
    pub fn mip_level(mut self, mip_level: u32) -> Self {
        self.0.mip_level = mip_level as _;
        self
    }
    #[inline]
    pub fn array_layer(mut self, array_layer: u32) -> Self {
        self.0.array_layer = array_layer as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageSubresource {
        self.0
    }
}
impl<'a> std::default::Default for ImageSubresourceBuilder<'a> {
    fn default() -> ImageSubresourceBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageSubresourceBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageSubresourceBuilder<'a> {
    type Target = ImageSubresource;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageSubresourceBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageSubresourceLayers.html) · Structure"]
#[doc(alias = "VkImageSubresourceLayers")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageSubresourceLayers {
    pub aspect_mask: crate::vk1_0::ImageAspectFlags,
    pub mip_level: u32,
    pub base_array_layer: u32,
    pub layer_count: u32,
}
impl Default for ImageSubresourceLayers {
    fn default() -> Self {
        Self {
            aspect_mask: Default::default(),
            mip_level: Default::default(),
            base_array_layer: Default::default(),
            layer_count: Default::default(),
        }
    }
}
impl std::fmt::Debug for ImageSubresourceLayers {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageSubresourceLayers")
            .field("aspect_mask", &self.aspect_mask)
            .field("mip_level", &self.mip_level)
            .field("base_array_layer", &self.base_array_layer)
            .field("layer_count", &self.layer_count)
            .finish()
    }
}
impl ImageSubresourceLayers {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageSubresourceLayersBuilder<'a> {
        ImageSubresourceLayersBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageSubresourceLayers.html) · Builder of [`ImageSubresourceLayers`]"]
#[repr(transparent)]
pub struct ImageSubresourceLayersBuilder<'a>(
    ImageSubresourceLayers,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> ImageSubresourceLayersBuilder<'a> {
    #[inline]
    pub fn new() -> ImageSubresourceLayersBuilder<'a> {
        ImageSubresourceLayersBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn aspect_mask(mut self, aspect_mask: crate::vk1_0::ImageAspectFlags) -> Self {
        self.0.aspect_mask = aspect_mask as _;
        self
    }
    #[inline]
    pub fn mip_level(mut self, mip_level: u32) -> Self {
        self.0.mip_level = mip_level as _;
        self
    }
    #[inline]
    pub fn base_array_layer(mut self, base_array_layer: u32) -> Self {
        self.0.base_array_layer = base_array_layer as _;
        self
    }
    #[inline]
    pub fn layer_count(mut self, layer_count: u32) -> Self {
        self.0.layer_count = layer_count as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageSubresourceLayers {
        self.0
    }
}
impl<'a> std::default::Default for ImageSubresourceLayersBuilder<'a> {
    fn default() -> ImageSubresourceLayersBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageSubresourceLayersBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageSubresourceLayersBuilder<'a> {
    type Target = ImageSubresourceLayers;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageSubresourceLayersBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageSubresourceRange.html) · Structure"]
#[doc(alias = "VkImageSubresourceRange")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageSubresourceRange {
    pub aspect_mask: crate::vk1_0::ImageAspectFlags,
    pub base_mip_level: u32,
    pub level_count: u32,
    pub base_array_layer: u32,
    pub layer_count: u32,
}
impl Default for ImageSubresourceRange {
    fn default() -> Self {
        Self {
            aspect_mask: Default::default(),
            base_mip_level: Default::default(),
            level_count: Default::default(),
            base_array_layer: Default::default(),
            layer_count: Default::default(),
        }
    }
}
impl std::fmt::Debug for ImageSubresourceRange {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageSubresourceRange")
            .field("aspect_mask", &self.aspect_mask)
            .field("base_mip_level", &self.base_mip_level)
            .field("level_count", &self.level_count)
            .field("base_array_layer", &self.base_array_layer)
            .field("layer_count", &self.layer_count)
            .finish()
    }
}
impl ImageSubresourceRange {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageSubresourceRangeBuilder<'a> {
        ImageSubresourceRangeBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageSubresourceRange.html) · Builder of [`ImageSubresourceRange`]"]
#[repr(transparent)]
pub struct ImageSubresourceRangeBuilder<'a>(
    ImageSubresourceRange,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> ImageSubresourceRangeBuilder<'a> {
    #[inline]
    pub fn new() -> ImageSubresourceRangeBuilder<'a> {
        ImageSubresourceRangeBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn aspect_mask(mut self, aspect_mask: crate::vk1_0::ImageAspectFlags) -> Self {
        self.0.aspect_mask = aspect_mask as _;
        self
    }
    #[inline]
    pub fn base_mip_level(mut self, base_mip_level: u32) -> Self {
        self.0.base_mip_level = base_mip_level as _;
        self
    }
    #[inline]
    pub fn level_count(mut self, level_count: u32) -> Self {
        self.0.level_count = level_count as _;
        self
    }
    #[inline]
    pub fn base_array_layer(mut self, base_array_layer: u32) -> Self {
        self.0.base_array_layer = base_array_layer as _;
        self
    }
    #[inline]
    pub fn layer_count(mut self, layer_count: u32) -> Self {
        self.0.layer_count = layer_count as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageSubresourceRange {
        self.0
    }
}
impl<'a> std::default::Default for ImageSubresourceRangeBuilder<'a> {
    fn default() -> ImageSubresourceRangeBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageSubresourceRangeBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageSubresourceRangeBuilder<'a> {
    type Target = ImageSubresourceRange;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageSubresourceRangeBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryBarrier.html) · Structure"]
#[doc(alias = "VkMemoryBarrier")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct MemoryBarrier {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub src_access_mask: crate::vk1_0::AccessFlags,
    pub dst_access_mask: crate::vk1_0::AccessFlags,
}
impl Default for MemoryBarrier {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::MEMORY_BARRIER,
            p_next: std::ptr::null(),
            src_access_mask: Default::default(),
            dst_access_mask: Default::default(),
        }
    }
}
impl std::fmt::Debug for MemoryBarrier {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("MemoryBarrier")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("src_access_mask", &self.src_access_mask)
            .field("dst_access_mask", &self.dst_access_mask)
            .finish()
    }
}
impl MemoryBarrier {
    #[inline]
    pub fn into_builder<'a>(self) -> MemoryBarrierBuilder<'a> {
        MemoryBarrierBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkMemoryBarrier.html) · Builder of [`MemoryBarrier`]"]
#[repr(transparent)]
pub struct MemoryBarrierBuilder<'a>(MemoryBarrier, std::marker::PhantomData<&'a ()>);
impl<'a> MemoryBarrierBuilder<'a> {
    #[inline]
    pub fn new() -> MemoryBarrierBuilder<'a> {
        MemoryBarrierBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn src_access_mask(mut self, src_access_mask: crate::vk1_0::AccessFlags) -> Self {
        self.0.src_access_mask = src_access_mask as _;
        self
    }
    #[inline]
    pub fn dst_access_mask(mut self, dst_access_mask: crate::vk1_0::AccessFlags) -> Self {
        self.0.dst_access_mask = dst_access_mask as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> MemoryBarrier {
        self.0
    }
}
impl<'a> std::default::Default for MemoryBarrierBuilder<'a> {
    fn default() -> MemoryBarrierBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for MemoryBarrierBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for MemoryBarrierBuilder<'a> {
    type Target = MemoryBarrier;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for MemoryBarrierBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferMemoryBarrier.html) · Structure"]
#[doc(alias = "VkBufferMemoryBarrier")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct BufferMemoryBarrier {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub src_access_mask: crate::vk1_0::AccessFlags,
    pub dst_access_mask: crate::vk1_0::AccessFlags,
    pub src_queue_family_index: u32,
    pub dst_queue_family_index: u32,
    pub buffer: crate::vk1_0::Buffer,
    pub offset: crate::vk1_0::DeviceSize,
    pub size: crate::vk1_0::DeviceSize,
}
impl Default for BufferMemoryBarrier {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::BUFFER_MEMORY_BARRIER,
            p_next: std::ptr::null(),
            src_access_mask: Default::default(),
            dst_access_mask: Default::default(),
            src_queue_family_index: Default::default(),
            dst_queue_family_index: Default::default(),
            buffer: Default::default(),
            offset: Default::default(),
            size: Default::default(),
        }
    }
}
impl std::fmt::Debug for BufferMemoryBarrier {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("BufferMemoryBarrier")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("src_access_mask", &self.src_access_mask)
            .field("dst_access_mask", &self.dst_access_mask)
            .field("src_queue_family_index", &self.src_queue_family_index)
            .field("dst_queue_family_index", &self.dst_queue_family_index)
            .field("buffer", &self.buffer)
            .field("offset", &self.offset)
            .field("size", &self.size)
            .finish()
    }
}
impl BufferMemoryBarrier {
    #[inline]
    pub fn into_builder<'a>(self) -> BufferMemoryBarrierBuilder<'a> {
        BufferMemoryBarrierBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferMemoryBarrier.html) · Builder of [`BufferMemoryBarrier`]"]
#[repr(transparent)]
pub struct BufferMemoryBarrierBuilder<'a>(BufferMemoryBarrier, std::marker::PhantomData<&'a ()>);
impl<'a> BufferMemoryBarrierBuilder<'a> {
    #[inline]
    pub fn new() -> BufferMemoryBarrierBuilder<'a> {
        BufferMemoryBarrierBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn src_access_mask(mut self, src_access_mask: crate::vk1_0::AccessFlags) -> Self {
        self.0.src_access_mask = src_access_mask as _;
        self
    }
    #[inline]
    pub fn dst_access_mask(mut self, dst_access_mask: crate::vk1_0::AccessFlags) -> Self {
        self.0.dst_access_mask = dst_access_mask as _;
        self
    }
    #[inline]
    pub fn src_queue_family_index(mut self, src_queue_family_index: u32) -> Self {
        self.0.src_queue_family_index = src_queue_family_index as _;
        self
    }
    #[inline]
    pub fn dst_queue_family_index(mut self, dst_queue_family_index: u32) -> Self {
        self.0.dst_queue_family_index = dst_queue_family_index as _;
        self
    }
    #[inline]
    pub fn buffer(mut self, buffer: crate::vk1_0::Buffer) -> Self {
        self.0.buffer = buffer as _;
        self
    }
    #[inline]
    pub fn offset(mut self, offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    pub fn size(mut self, size: crate::vk1_0::DeviceSize) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> BufferMemoryBarrier {
        self.0
    }
}
impl<'a> std::default::Default for BufferMemoryBarrierBuilder<'a> {
    fn default() -> BufferMemoryBarrierBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for BufferMemoryBarrierBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for BufferMemoryBarrierBuilder<'a> {
    type Target = BufferMemoryBarrier;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for BufferMemoryBarrierBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageMemoryBarrier.html) · Structure"]
#[doc(alias = "VkImageMemoryBarrier")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageMemoryBarrier {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub src_access_mask: crate::vk1_0::AccessFlags,
    pub dst_access_mask: crate::vk1_0::AccessFlags,
    pub old_layout: crate::vk1_0::ImageLayout,
    pub new_layout: crate::vk1_0::ImageLayout,
    pub src_queue_family_index: u32,
    pub dst_queue_family_index: u32,
    pub image: crate::vk1_0::Image,
    pub subresource_range: crate::vk1_0::ImageSubresourceRange,
}
impl Default for ImageMemoryBarrier {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::IMAGE_MEMORY_BARRIER,
            p_next: std::ptr::null(),
            src_access_mask: Default::default(),
            dst_access_mask: Default::default(),
            old_layout: Default::default(),
            new_layout: Default::default(),
            src_queue_family_index: Default::default(),
            dst_queue_family_index: Default::default(),
            image: Default::default(),
            subresource_range: Default::default(),
        }
    }
}
impl std::fmt::Debug for ImageMemoryBarrier {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageMemoryBarrier")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("src_access_mask", &self.src_access_mask)
            .field("dst_access_mask", &self.dst_access_mask)
            .field("old_layout", &self.old_layout)
            .field("new_layout", &self.new_layout)
            .field("src_queue_family_index", &self.src_queue_family_index)
            .field("dst_queue_family_index", &self.dst_queue_family_index)
            .field("image", &self.image)
            .field("subresource_range", &self.subresource_range)
            .finish()
    }
}
impl ImageMemoryBarrier {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageMemoryBarrierBuilder<'a> {
        ImageMemoryBarrierBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::extensions::ext_sample_locations::SampleLocationsInfoEXT>
    for ImageMemoryBarrierBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_sample_locations::SampleLocationsInfoEXTBuilder<'_>,
    > for ImageMemoryBarrierBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageMemoryBarrier.html) · Builder of [`ImageMemoryBarrier`]"]
#[repr(transparent)]
pub struct ImageMemoryBarrierBuilder<'a>(ImageMemoryBarrier, std::marker::PhantomData<&'a ()>);
impl<'a> ImageMemoryBarrierBuilder<'a> {
    #[inline]
    pub fn new() -> ImageMemoryBarrierBuilder<'a> {
        ImageMemoryBarrierBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn src_access_mask(mut self, src_access_mask: crate::vk1_0::AccessFlags) -> Self {
        self.0.src_access_mask = src_access_mask as _;
        self
    }
    #[inline]
    pub fn dst_access_mask(mut self, dst_access_mask: crate::vk1_0::AccessFlags) -> Self {
        self.0.dst_access_mask = dst_access_mask as _;
        self
    }
    #[inline]
    pub fn old_layout(mut self, old_layout: crate::vk1_0::ImageLayout) -> Self {
        self.0.old_layout = old_layout as _;
        self
    }
    #[inline]
    pub fn new_layout(mut self, new_layout: crate::vk1_0::ImageLayout) -> Self {
        self.0.new_layout = new_layout as _;
        self
    }
    #[inline]
    pub fn src_queue_family_index(mut self, src_queue_family_index: u32) -> Self {
        self.0.src_queue_family_index = src_queue_family_index as _;
        self
    }
    #[inline]
    pub fn dst_queue_family_index(mut self, dst_queue_family_index: u32) -> Self {
        self.0.dst_queue_family_index = dst_queue_family_index as _;
        self
    }
    #[inline]
    pub fn image(mut self, image: crate::vk1_0::Image) -> Self {
        self.0.image = image as _;
        self
    }
    #[inline]
    pub fn subresource_range(
        mut self,
        subresource_range: crate::vk1_0::ImageSubresourceRange,
    ) -> Self {
        self.0.subresource_range = subresource_range as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageMemoryBarrier {
        self.0
    }
}
impl<'a> std::default::Default for ImageMemoryBarrierBuilder<'a> {
    fn default() -> ImageMemoryBarrierBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageMemoryBarrierBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageMemoryBarrierBuilder<'a> {
    type Target = ImageMemoryBarrier;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageMemoryBarrierBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageCreateInfo.html) · Structure"]
#[doc(alias = "VkImageCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::ImageCreateFlags,
    pub image_type: crate::vk1_0::ImageType,
    pub format: crate::vk1_0::Format,
    pub extent: crate::vk1_0::Extent3D,
    pub mip_levels: u32,
    pub array_layers: u32,
    pub samples: crate::vk1_0::SampleCountFlagBits,
    pub tiling: crate::vk1_0::ImageTiling,
    pub usage: crate::vk1_0::ImageUsageFlags,
    pub sharing_mode: crate::vk1_0::SharingMode,
    pub queue_family_index_count: u32,
    pub p_queue_family_indices: *const u32,
    pub initial_layout: crate::vk1_0::ImageLayout,
}
impl Default for ImageCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::IMAGE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            image_type: Default::default(),
            format: Default::default(),
            extent: Default::default(),
            mip_levels: Default::default(),
            array_layers: Default::default(),
            samples: Default::default(),
            tiling: Default::default(),
            usage: Default::default(),
            sharing_mode: Default::default(),
            queue_family_index_count: Default::default(),
            p_queue_family_indices: std::ptr::null(),
            initial_layout: Default::default(),
        }
    }
}
impl std::fmt::Debug for ImageCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("image_type", &self.image_type)
            .field("format", &self.format)
            .field("extent", &self.extent)
            .field("mip_levels", &self.mip_levels)
            .field("array_layers", &self.array_layers)
            .field("samples", &self.samples)
            .field("tiling", &self.tiling)
            .field("usage", &self.usage)
            .field("sharing_mode", &self.sharing_mode)
            .field("queue_family_index_count", &self.queue_family_index_count)
            .field("p_queue_family_indices", &self.p_queue_family_indices)
            .field("initial_layout", &self.initial_layout)
            .finish()
    }
}
impl ImageCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageCreateInfoBuilder<'a> {
        ImageCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_dedicated_allocation::DedicatedAllocationImageCreateInfoNV,
    > for ImageCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_dedicated_allocation::DedicatedAllocationImageCreateInfoNVBuilder<'_>,
    > for ImageCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_external_memory::ExternalMemoryImageCreateInfoNV,
    > for ImageCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_external_memory::ExternalMemoryImageCreateInfoNVBuilder<'_>,
    > for ImageCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExternalMemoryImageCreateInfo>
    for ImageCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExternalMemoryImageCreateInfoBuilder<'_>>
    for ImageCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::extensions::khr_swapchain::ImageSwapchainCreateInfoKHR>
    for ImageCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_swapchain::ImageSwapchainCreateInfoKHRBuilder<'_>,
    > for ImageCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::ImageFormatListCreateInfo>
    for ImageCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::ImageFormatListCreateInfoBuilder<'_>>
    for ImageCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::android_external_memory_android_hardware_buffer::ExternalFormatANDROID,
    > for ImageCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: android_external_memory_android_hardware_buffer :: ExternalFormatANDROIDBuilder < '_ >> for ImageCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_image_drm_format_modifier::ImageDrmFormatModifierListCreateInfoEXT,
    > for ImageCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_image_drm_format_modifier :: ImageDrmFormatModifierListCreateInfoEXTBuilder < '_ >> for ImageCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_image_drm_format_modifier :: ImageDrmFormatModifierExplicitCreateInfoEXT > for ImageCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_image_drm_format_modifier :: ImageDrmFormatModifierExplicitCreateInfoEXTBuilder < '_ >> for ImageCreateInfoBuilder < 'a > { }
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::ImageStencilUsageCreateInfo>
    for ImageCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::ImageStencilUsageCreateInfoBuilder<'_>>
    for ImageCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageCreateInfo.html) · Builder of [`ImageCreateInfo`]"]
#[repr(transparent)]
pub struct ImageCreateInfoBuilder<'a>(ImageCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> ImageCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> ImageCreateInfoBuilder<'a> {
        ImageCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::ImageCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn image_type(mut self, image_type: crate::vk1_0::ImageType) -> Self {
        self.0.image_type = image_type as _;
        self
    }
    #[inline]
    pub fn format(mut self, format: crate::vk1_0::Format) -> Self {
        self.0.format = format as _;
        self
    }
    #[inline]
    pub fn extent(mut self, extent: crate::vk1_0::Extent3D) -> Self {
        self.0.extent = extent as _;
        self
    }
    #[inline]
    pub fn mip_levels(mut self, mip_levels: u32) -> Self {
        self.0.mip_levels = mip_levels as _;
        self
    }
    #[inline]
    pub fn array_layers(mut self, array_layers: u32) -> Self {
        self.0.array_layers = array_layers as _;
        self
    }
    #[inline]
    pub fn samples(mut self, samples: crate::vk1_0::SampleCountFlagBits) -> Self {
        self.0.samples = samples as _;
        self
    }
    #[inline]
    pub fn tiling(mut self, tiling: crate::vk1_0::ImageTiling) -> Self {
        self.0.tiling = tiling as _;
        self
    }
    #[inline]
    pub fn usage(mut self, usage: crate::vk1_0::ImageUsageFlags) -> Self {
        self.0.usage = usage as _;
        self
    }
    #[inline]
    pub fn sharing_mode(mut self, sharing_mode: crate::vk1_0::SharingMode) -> Self {
        self.0.sharing_mode = sharing_mode as _;
        self
    }
    #[inline]
    pub fn queue_family_indices(mut self, queue_family_indices: &'a [u32]) -> Self {
        self.0.p_queue_family_indices = queue_family_indices.as_ptr() as _;
        self.0.queue_family_index_count = queue_family_indices.len() as _;
        self
    }
    #[inline]
    pub fn initial_layout(mut self, initial_layout: crate::vk1_0::ImageLayout) -> Self {
        self.0.initial_layout = initial_layout as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for ImageCreateInfoBuilder<'a> {
    fn default() -> ImageCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageCreateInfoBuilder<'a> {
    type Target = ImageCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubresourceLayout.html) · Structure"]
#[doc(alias = "VkSubresourceLayout")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SubresourceLayout {
    pub offset: crate::vk1_0::DeviceSize,
    pub size: crate::vk1_0::DeviceSize,
    pub row_pitch: crate::vk1_0::DeviceSize,
    pub array_pitch: crate::vk1_0::DeviceSize,
    pub depth_pitch: crate::vk1_0::DeviceSize,
}
impl Default for SubresourceLayout {
    fn default() -> Self {
        Self {
            offset: Default::default(),
            size: Default::default(),
            row_pitch: Default::default(),
            array_pitch: Default::default(),
            depth_pitch: Default::default(),
        }
    }
}
impl std::fmt::Debug for SubresourceLayout {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SubresourceLayout")
            .field("offset", &self.offset)
            .field("size", &self.size)
            .field("row_pitch", &self.row_pitch)
            .field("array_pitch", &self.array_pitch)
            .field("depth_pitch", &self.depth_pitch)
            .finish()
    }
}
impl SubresourceLayout {
    #[inline]
    pub fn into_builder<'a>(self) -> SubresourceLayoutBuilder<'a> {
        SubresourceLayoutBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubresourceLayout.html) · Builder of [`SubresourceLayout`]"]
#[repr(transparent)]
pub struct SubresourceLayoutBuilder<'a>(SubresourceLayout, std::marker::PhantomData<&'a ()>);
impl<'a> SubresourceLayoutBuilder<'a> {
    #[inline]
    pub fn new() -> SubresourceLayoutBuilder<'a> {
        SubresourceLayoutBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn offset(mut self, offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    pub fn size(mut self, size: crate::vk1_0::DeviceSize) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    pub fn row_pitch(mut self, row_pitch: crate::vk1_0::DeviceSize) -> Self {
        self.0.row_pitch = row_pitch as _;
        self
    }
    #[inline]
    pub fn array_pitch(mut self, array_pitch: crate::vk1_0::DeviceSize) -> Self {
        self.0.array_pitch = array_pitch as _;
        self
    }
    #[inline]
    pub fn depth_pitch(mut self, depth_pitch: crate::vk1_0::DeviceSize) -> Self {
        self.0.depth_pitch = depth_pitch as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SubresourceLayout {
        self.0
    }
}
impl<'a> std::default::Default for SubresourceLayoutBuilder<'a> {
    fn default() -> SubresourceLayoutBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SubresourceLayoutBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SubresourceLayoutBuilder<'a> {
    type Target = SubresourceLayout;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SubresourceLayoutBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageViewCreateInfo.html) · Structure"]
#[doc(alias = "VkImageViewCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageViewCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::ImageViewCreateFlags,
    pub image: crate::vk1_0::Image,
    pub view_type: crate::vk1_0::ImageViewType,
    pub format: crate::vk1_0::Format,
    pub components: crate::vk1_0::ComponentMapping,
    pub subresource_range: crate::vk1_0::ImageSubresourceRange,
}
impl Default for ImageViewCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::IMAGE_VIEW_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            image: Default::default(),
            view_type: Default::default(),
            format: Default::default(),
            components: Default::default(),
            subresource_range: Default::default(),
        }
    }
}
impl std::fmt::Debug for ImageViewCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageViewCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("image", &self.image)
            .field("view_type", &self.view_type)
            .field("format", &self.format)
            .field("components", &self.components)
            .field("subresource_range", &self.subresource_range)
            .finish()
    }
}
impl ImageViewCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageViewCreateInfoBuilder<'a> {
        ImageViewCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ImageViewUsageCreateInfo>
    for ImageViewCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ImageViewUsageCreateInfoBuilder<'_>>
    for ImageViewCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::SamplerYcbcrConversionInfo>
    for ImageViewCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::SamplerYcbcrConversionInfoBuilder<'_>>
    for ImageViewCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::extensions::ext_astc_decode_mode::ImageViewASTCDecodeModeEXT>
    for ImageViewCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_astc_decode_mode::ImageViewASTCDecodeModeEXTBuilder<'_>,
    > for ImageViewCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageViewCreateInfo.html) · Builder of [`ImageViewCreateInfo`]"]
#[repr(transparent)]
pub struct ImageViewCreateInfoBuilder<'a>(ImageViewCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> ImageViewCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> ImageViewCreateInfoBuilder<'a> {
        ImageViewCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::ImageViewCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn image(mut self, image: crate::vk1_0::Image) -> Self {
        self.0.image = image as _;
        self
    }
    #[inline]
    pub fn view_type(mut self, view_type: crate::vk1_0::ImageViewType) -> Self {
        self.0.view_type = view_type as _;
        self
    }
    #[inline]
    pub fn format(mut self, format: crate::vk1_0::Format) -> Self {
        self.0.format = format as _;
        self
    }
    #[inline]
    pub fn components(mut self, components: crate::vk1_0::ComponentMapping) -> Self {
        self.0.components = components as _;
        self
    }
    #[inline]
    pub fn subresource_range(
        mut self,
        subresource_range: crate::vk1_0::ImageSubresourceRange,
    ) -> Self {
        self.0.subresource_range = subresource_range as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageViewCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for ImageViewCreateInfoBuilder<'a> {
    fn default() -> ImageViewCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageViewCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageViewCreateInfoBuilder<'a> {
    type Target = ImageViewCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageViewCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferCopy.html) · Structure"]
#[doc(alias = "VkBufferCopy")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct BufferCopy {
    pub src_offset: crate::vk1_0::DeviceSize,
    pub dst_offset: crate::vk1_0::DeviceSize,
    pub size: crate::vk1_0::DeviceSize,
}
impl Default for BufferCopy {
    fn default() -> Self {
        Self {
            src_offset: Default::default(),
            dst_offset: Default::default(),
            size: Default::default(),
        }
    }
}
impl std::fmt::Debug for BufferCopy {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("BufferCopy")
            .field("src_offset", &self.src_offset)
            .field("dst_offset", &self.dst_offset)
            .field("size", &self.size)
            .finish()
    }
}
impl BufferCopy {
    #[inline]
    pub fn into_builder<'a>(self) -> BufferCopyBuilder<'a> {
        BufferCopyBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferCopy.html) · Builder of [`BufferCopy`]"]
#[repr(transparent)]
pub struct BufferCopyBuilder<'a>(BufferCopy, std::marker::PhantomData<&'a ()>);
impl<'a> BufferCopyBuilder<'a> {
    #[inline]
    pub fn new() -> BufferCopyBuilder<'a> {
        BufferCopyBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn src_offset(mut self, src_offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.src_offset = src_offset as _;
        self
    }
    #[inline]
    pub fn dst_offset(mut self, dst_offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.dst_offset = dst_offset as _;
        self
    }
    #[inline]
    pub fn size(mut self, size: crate::vk1_0::DeviceSize) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> BufferCopy {
        self.0
    }
}
impl<'a> std::default::Default for BufferCopyBuilder<'a> {
    fn default() -> BufferCopyBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for BufferCopyBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for BufferCopyBuilder<'a> {
    type Target = BufferCopy;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for BufferCopyBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseMemoryBind.html) · Structure"]
#[doc(alias = "VkSparseMemoryBind")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SparseMemoryBind {
    pub resource_offset: crate::vk1_0::DeviceSize,
    pub size: crate::vk1_0::DeviceSize,
    pub memory: crate::vk1_0::DeviceMemory,
    pub memory_offset: crate::vk1_0::DeviceSize,
    pub flags: crate::vk1_0::SparseMemoryBindFlags,
}
impl Default for SparseMemoryBind {
    fn default() -> Self {
        Self {
            resource_offset: Default::default(),
            size: Default::default(),
            memory: Default::default(),
            memory_offset: Default::default(),
            flags: Default::default(),
        }
    }
}
impl std::fmt::Debug for SparseMemoryBind {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SparseMemoryBind")
            .field("resource_offset", &self.resource_offset)
            .field("size", &self.size)
            .field("memory", &self.memory)
            .field("memory_offset", &self.memory_offset)
            .field("flags", &self.flags)
            .finish()
    }
}
impl SparseMemoryBind {
    #[inline]
    pub fn into_builder<'a>(self) -> SparseMemoryBindBuilder<'a> {
        SparseMemoryBindBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseMemoryBind.html) · Builder of [`SparseMemoryBind`]"]
#[repr(transparent)]
pub struct SparseMemoryBindBuilder<'a>(SparseMemoryBind, std::marker::PhantomData<&'a ()>);
impl<'a> SparseMemoryBindBuilder<'a> {
    #[inline]
    pub fn new() -> SparseMemoryBindBuilder<'a> {
        SparseMemoryBindBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn resource_offset(mut self, resource_offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.resource_offset = resource_offset as _;
        self
    }
    #[inline]
    pub fn size(mut self, size: crate::vk1_0::DeviceSize) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    pub fn memory(mut self, memory: crate::vk1_0::DeviceMemory) -> Self {
        self.0.memory = memory as _;
        self
    }
    #[inline]
    pub fn memory_offset(mut self, memory_offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.memory_offset = memory_offset as _;
        self
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::SparseMemoryBindFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SparseMemoryBind {
        self.0
    }
}
impl<'a> std::default::Default for SparseMemoryBindBuilder<'a> {
    fn default() -> SparseMemoryBindBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SparseMemoryBindBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SparseMemoryBindBuilder<'a> {
    type Target = SparseMemoryBind;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SparseMemoryBindBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageMemoryBind.html) · Structure"]
#[doc(alias = "VkSparseImageMemoryBind")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SparseImageMemoryBind {
    pub subresource: crate::vk1_0::ImageSubresource,
    pub offset: crate::vk1_0::Offset3D,
    pub extent: crate::vk1_0::Extent3D,
    pub memory: crate::vk1_0::DeviceMemory,
    pub memory_offset: crate::vk1_0::DeviceSize,
    pub flags: crate::vk1_0::SparseMemoryBindFlags,
}
impl Default for SparseImageMemoryBind {
    fn default() -> Self {
        Self {
            subresource: Default::default(),
            offset: Default::default(),
            extent: Default::default(),
            memory: Default::default(),
            memory_offset: Default::default(),
            flags: Default::default(),
        }
    }
}
impl std::fmt::Debug for SparseImageMemoryBind {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SparseImageMemoryBind")
            .field("subresource", &self.subresource)
            .field("offset", &self.offset)
            .field("extent", &self.extent)
            .field("memory", &self.memory)
            .field("memory_offset", &self.memory_offset)
            .field("flags", &self.flags)
            .finish()
    }
}
impl SparseImageMemoryBind {
    #[inline]
    pub fn into_builder<'a>(self) -> SparseImageMemoryBindBuilder<'a> {
        SparseImageMemoryBindBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageMemoryBind.html) · Builder of [`SparseImageMemoryBind`]"]
#[repr(transparent)]
pub struct SparseImageMemoryBindBuilder<'a>(
    SparseImageMemoryBind,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> SparseImageMemoryBindBuilder<'a> {
    #[inline]
    pub fn new() -> SparseImageMemoryBindBuilder<'a> {
        SparseImageMemoryBindBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn subresource(mut self, subresource: crate::vk1_0::ImageSubresource) -> Self {
        self.0.subresource = subresource as _;
        self
    }
    #[inline]
    pub fn offset(mut self, offset: crate::vk1_0::Offset3D) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    pub fn extent(mut self, extent: crate::vk1_0::Extent3D) -> Self {
        self.0.extent = extent as _;
        self
    }
    #[inline]
    pub fn memory(mut self, memory: crate::vk1_0::DeviceMemory) -> Self {
        self.0.memory = memory as _;
        self
    }
    #[inline]
    pub fn memory_offset(mut self, memory_offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.memory_offset = memory_offset as _;
        self
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::SparseMemoryBindFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SparseImageMemoryBind {
        self.0
    }
}
impl<'a> std::default::Default for SparseImageMemoryBindBuilder<'a> {
    fn default() -> SparseImageMemoryBindBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SparseImageMemoryBindBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SparseImageMemoryBindBuilder<'a> {
    type Target = SparseImageMemoryBind;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SparseImageMemoryBindBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseBufferMemoryBindInfo.html) · Structure"]
#[doc(alias = "VkSparseBufferMemoryBindInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SparseBufferMemoryBindInfo {
    pub buffer: crate::vk1_0::Buffer,
    pub bind_count: u32,
    pub p_binds: *const crate::vk1_0::SparseMemoryBind,
}
impl Default for SparseBufferMemoryBindInfo {
    fn default() -> Self {
        Self {
            buffer: Default::default(),
            bind_count: Default::default(),
            p_binds: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for SparseBufferMemoryBindInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SparseBufferMemoryBindInfo")
            .field("buffer", &self.buffer)
            .field("bind_count", &self.bind_count)
            .field("p_binds", &self.p_binds)
            .finish()
    }
}
impl SparseBufferMemoryBindInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> SparseBufferMemoryBindInfoBuilder<'a> {
        SparseBufferMemoryBindInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseBufferMemoryBindInfo.html) · Builder of [`SparseBufferMemoryBindInfo`]"]
#[repr(transparent)]
pub struct SparseBufferMemoryBindInfoBuilder<'a>(
    SparseBufferMemoryBindInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> SparseBufferMemoryBindInfoBuilder<'a> {
    #[inline]
    pub fn new() -> SparseBufferMemoryBindInfoBuilder<'a> {
        SparseBufferMemoryBindInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn buffer(mut self, buffer: crate::vk1_0::Buffer) -> Self {
        self.0.buffer = buffer as _;
        self
    }
    #[inline]
    pub fn binds(mut self, binds: &'a [crate::vk1_0::SparseMemoryBindBuilder]) -> Self {
        self.0.p_binds = binds.as_ptr() as _;
        self.0.bind_count = binds.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SparseBufferMemoryBindInfo {
        self.0
    }
}
impl<'a> std::default::Default for SparseBufferMemoryBindInfoBuilder<'a> {
    fn default() -> SparseBufferMemoryBindInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SparseBufferMemoryBindInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SparseBufferMemoryBindInfoBuilder<'a> {
    type Target = SparseBufferMemoryBindInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SparseBufferMemoryBindInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageOpaqueMemoryBindInfo.html) · Structure"]
#[doc(alias = "VkSparseImageOpaqueMemoryBindInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SparseImageOpaqueMemoryBindInfo {
    pub image: crate::vk1_0::Image,
    pub bind_count: u32,
    pub p_binds: *const crate::vk1_0::SparseMemoryBind,
}
impl Default for SparseImageOpaqueMemoryBindInfo {
    fn default() -> Self {
        Self {
            image: Default::default(),
            bind_count: Default::default(),
            p_binds: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for SparseImageOpaqueMemoryBindInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SparseImageOpaqueMemoryBindInfo")
            .field("image", &self.image)
            .field("bind_count", &self.bind_count)
            .field("p_binds", &self.p_binds)
            .finish()
    }
}
impl SparseImageOpaqueMemoryBindInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> SparseImageOpaqueMemoryBindInfoBuilder<'a> {
        SparseImageOpaqueMemoryBindInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageOpaqueMemoryBindInfo.html) · Builder of [`SparseImageOpaqueMemoryBindInfo`]"]
#[repr(transparent)]
pub struct SparseImageOpaqueMemoryBindInfoBuilder<'a>(
    SparseImageOpaqueMemoryBindInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> SparseImageOpaqueMemoryBindInfoBuilder<'a> {
    #[inline]
    pub fn new() -> SparseImageOpaqueMemoryBindInfoBuilder<'a> {
        SparseImageOpaqueMemoryBindInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn image(mut self, image: crate::vk1_0::Image) -> Self {
        self.0.image = image as _;
        self
    }
    #[inline]
    pub fn binds(mut self, binds: &'a [crate::vk1_0::SparseMemoryBindBuilder]) -> Self {
        self.0.p_binds = binds.as_ptr() as _;
        self.0.bind_count = binds.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SparseImageOpaqueMemoryBindInfo {
        self.0
    }
}
impl<'a> std::default::Default for SparseImageOpaqueMemoryBindInfoBuilder<'a> {
    fn default() -> SparseImageOpaqueMemoryBindInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SparseImageOpaqueMemoryBindInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SparseImageOpaqueMemoryBindInfoBuilder<'a> {
    type Target = SparseImageOpaqueMemoryBindInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SparseImageOpaqueMemoryBindInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageMemoryBindInfo.html) · Structure"]
#[doc(alias = "VkSparseImageMemoryBindInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SparseImageMemoryBindInfo {
    pub image: crate::vk1_0::Image,
    pub bind_count: u32,
    pub p_binds: *const crate::vk1_0::SparseImageMemoryBind,
}
impl Default for SparseImageMemoryBindInfo {
    fn default() -> Self {
        Self {
            image: Default::default(),
            bind_count: Default::default(),
            p_binds: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for SparseImageMemoryBindInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SparseImageMemoryBindInfo")
            .field("image", &self.image)
            .field("bind_count", &self.bind_count)
            .field("p_binds", &self.p_binds)
            .finish()
    }
}
impl SparseImageMemoryBindInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> SparseImageMemoryBindInfoBuilder<'a> {
        SparseImageMemoryBindInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSparseImageMemoryBindInfo.html) · Builder of [`SparseImageMemoryBindInfo`]"]
#[repr(transparent)]
pub struct SparseImageMemoryBindInfoBuilder<'a>(
    SparseImageMemoryBindInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> SparseImageMemoryBindInfoBuilder<'a> {
    #[inline]
    pub fn new() -> SparseImageMemoryBindInfoBuilder<'a> {
        SparseImageMemoryBindInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn image(mut self, image: crate::vk1_0::Image) -> Self {
        self.0.image = image as _;
        self
    }
    #[inline]
    pub fn binds(mut self, binds: &'a [crate::vk1_0::SparseImageMemoryBindBuilder]) -> Self {
        self.0.p_binds = binds.as_ptr() as _;
        self.0.bind_count = binds.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SparseImageMemoryBindInfo {
        self.0
    }
}
impl<'a> std::default::Default for SparseImageMemoryBindInfoBuilder<'a> {
    fn default() -> SparseImageMemoryBindInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SparseImageMemoryBindInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SparseImageMemoryBindInfoBuilder<'a> {
    type Target = SparseImageMemoryBindInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SparseImageMemoryBindInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBindSparseInfo.html) · Structure"]
#[doc(alias = "VkBindSparseInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct BindSparseInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub wait_semaphore_count: u32,
    pub p_wait_semaphores: *const crate::vk1_0::Semaphore,
    pub buffer_bind_count: u32,
    pub p_buffer_binds: *const crate::vk1_0::SparseBufferMemoryBindInfo,
    pub image_opaque_bind_count: u32,
    pub p_image_opaque_binds: *const crate::vk1_0::SparseImageOpaqueMemoryBindInfo,
    pub image_bind_count: u32,
    pub p_image_binds: *const crate::vk1_0::SparseImageMemoryBindInfo,
    pub signal_semaphore_count: u32,
    pub p_signal_semaphores: *const crate::vk1_0::Semaphore,
}
impl Default for BindSparseInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::BIND_SPARSE_INFO,
            p_next: std::ptr::null(),
            wait_semaphore_count: Default::default(),
            p_wait_semaphores: std::ptr::null(),
            buffer_bind_count: Default::default(),
            p_buffer_binds: std::ptr::null(),
            image_opaque_bind_count: Default::default(),
            p_image_opaque_binds: std::ptr::null(),
            image_bind_count: Default::default(),
            p_image_binds: std::ptr::null(),
            signal_semaphore_count: Default::default(),
            p_signal_semaphores: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for BindSparseInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("BindSparseInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("wait_semaphore_count", &self.wait_semaphore_count)
            .field("p_wait_semaphores", &self.p_wait_semaphores)
            .field("buffer_bind_count", &self.buffer_bind_count)
            .field("p_buffer_binds", &self.p_buffer_binds)
            .field("image_opaque_bind_count", &self.image_opaque_bind_count)
            .field("p_image_opaque_binds", &self.p_image_opaque_binds)
            .field("image_bind_count", &self.image_bind_count)
            .field("p_image_binds", &self.p_image_binds)
            .field("signal_semaphore_count", &self.signal_semaphore_count)
            .field("p_signal_semaphores", &self.p_signal_semaphores)
            .finish()
    }
}
impl BindSparseInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> BindSparseInfoBuilder<'a> {
        BindSparseInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupBindSparseInfo>
    for BindSparseInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupBindSparseInfoBuilder<'_>>
    for BindSparseInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::TimelineSemaphoreSubmitInfo>
    for BindSparseInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::TimelineSemaphoreSubmitInfoBuilder<'_>>
    for BindSparseInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBindSparseInfo.html) · Builder of [`BindSparseInfo`]"]
#[repr(transparent)]
pub struct BindSparseInfoBuilder<'a>(BindSparseInfo, std::marker::PhantomData<&'a ()>);
impl<'a> BindSparseInfoBuilder<'a> {
    #[inline]
    pub fn new() -> BindSparseInfoBuilder<'a> {
        BindSparseInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn wait_semaphores(mut self, wait_semaphores: &'a [crate::vk1_0::Semaphore]) -> Self {
        self.0.p_wait_semaphores = wait_semaphores.as_ptr() as _;
        self.0.wait_semaphore_count = wait_semaphores.len() as _;
        self
    }
    #[inline]
    pub fn buffer_binds(
        mut self,
        buffer_binds: &'a [crate::vk1_0::SparseBufferMemoryBindInfoBuilder],
    ) -> Self {
        self.0.p_buffer_binds = buffer_binds.as_ptr() as _;
        self.0.buffer_bind_count = buffer_binds.len() as _;
        self
    }
    #[inline]
    pub fn image_opaque_binds(
        mut self,
        image_opaque_binds: &'a [crate::vk1_0::SparseImageOpaqueMemoryBindInfoBuilder],
    ) -> Self {
        self.0.p_image_opaque_binds = image_opaque_binds.as_ptr() as _;
        self.0.image_opaque_bind_count = image_opaque_binds.len() as _;
        self
    }
    #[inline]
    pub fn image_binds(
        mut self,
        image_binds: &'a [crate::vk1_0::SparseImageMemoryBindInfoBuilder],
    ) -> Self {
        self.0.p_image_binds = image_binds.as_ptr() as _;
        self.0.image_bind_count = image_binds.len() as _;
        self
    }
    #[inline]
    pub fn signal_semaphores(mut self, signal_semaphores: &'a [crate::vk1_0::Semaphore]) -> Self {
        self.0.p_signal_semaphores = signal_semaphores.as_ptr() as _;
        self.0.signal_semaphore_count = signal_semaphores.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> BindSparseInfo {
        self.0
    }
}
impl<'a> std::default::Default for BindSparseInfoBuilder<'a> {
    fn default() -> BindSparseInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for BindSparseInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for BindSparseInfoBuilder<'a> {
    type Target = BindSparseInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for BindSparseInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageCopy.html) · Structure"]
#[doc(alias = "VkImageCopy")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageCopy {
    pub src_subresource: crate::vk1_0::ImageSubresourceLayers,
    pub src_offset: crate::vk1_0::Offset3D,
    pub dst_subresource: crate::vk1_0::ImageSubresourceLayers,
    pub dst_offset: crate::vk1_0::Offset3D,
    pub extent: crate::vk1_0::Extent3D,
}
impl Default for ImageCopy {
    fn default() -> Self {
        Self {
            src_subresource: Default::default(),
            src_offset: Default::default(),
            dst_subresource: Default::default(),
            dst_offset: Default::default(),
            extent: Default::default(),
        }
    }
}
impl std::fmt::Debug for ImageCopy {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageCopy")
            .field("src_subresource", &self.src_subresource)
            .field("src_offset", &self.src_offset)
            .field("dst_subresource", &self.dst_subresource)
            .field("dst_offset", &self.dst_offset)
            .field("extent", &self.extent)
            .finish()
    }
}
impl ImageCopy {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageCopyBuilder<'a> {
        ImageCopyBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageCopy.html) · Builder of [`ImageCopy`]"]
#[repr(transparent)]
pub struct ImageCopyBuilder<'a>(ImageCopy, std::marker::PhantomData<&'a ()>);
impl<'a> ImageCopyBuilder<'a> {
    #[inline]
    pub fn new() -> ImageCopyBuilder<'a> {
        ImageCopyBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn src_subresource(
        mut self,
        src_subresource: crate::vk1_0::ImageSubresourceLayers,
    ) -> Self {
        self.0.src_subresource = src_subresource as _;
        self
    }
    #[inline]
    pub fn src_offset(mut self, src_offset: crate::vk1_0::Offset3D) -> Self {
        self.0.src_offset = src_offset as _;
        self
    }
    #[inline]
    pub fn dst_subresource(
        mut self,
        dst_subresource: crate::vk1_0::ImageSubresourceLayers,
    ) -> Self {
        self.0.dst_subresource = dst_subresource as _;
        self
    }
    #[inline]
    pub fn dst_offset(mut self, dst_offset: crate::vk1_0::Offset3D) -> Self {
        self.0.dst_offset = dst_offset as _;
        self
    }
    #[inline]
    pub fn extent(mut self, extent: crate::vk1_0::Extent3D) -> Self {
        self.0.extent = extent as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageCopy {
        self.0
    }
}
impl<'a> std::default::Default for ImageCopyBuilder<'a> {
    fn default() -> ImageCopyBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageCopyBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageCopyBuilder<'a> {
    type Target = ImageCopy;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageCopyBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageBlit.html) · Structure"]
#[doc(alias = "VkImageBlit")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageBlit {
    pub src_subresource: crate::vk1_0::ImageSubresourceLayers,
    pub src_offsets: [crate::vk1_0::Offset3D; 2],
    pub dst_subresource: crate::vk1_0::ImageSubresourceLayers,
    pub dst_offsets: [crate::vk1_0::Offset3D; 2],
}
impl Default for ImageBlit {
    fn default() -> Self {
        Self {
            src_subresource: Default::default(),
            src_offsets: unsafe { std::mem::zeroed() },
            dst_subresource: Default::default(),
            dst_offsets: unsafe { std::mem::zeroed() },
        }
    }
}
impl std::fmt::Debug for ImageBlit {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageBlit")
            .field("src_subresource", &self.src_subresource)
            .field("src_offsets", &self.src_offsets)
            .field("dst_subresource", &self.dst_subresource)
            .field("dst_offsets", &self.dst_offsets)
            .finish()
    }
}
impl ImageBlit {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageBlitBuilder<'a> {
        ImageBlitBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageBlit.html) · Builder of [`ImageBlit`]"]
#[repr(transparent)]
pub struct ImageBlitBuilder<'a>(ImageBlit, std::marker::PhantomData<&'a ()>);
impl<'a> ImageBlitBuilder<'a> {
    #[inline]
    pub fn new() -> ImageBlitBuilder<'a> {
        ImageBlitBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn src_subresource(
        mut self,
        src_subresource: crate::vk1_0::ImageSubresourceLayers,
    ) -> Self {
        self.0.src_subresource = src_subresource as _;
        self
    }
    #[inline]
    pub fn src_offsets(mut self, src_offsets: [crate::vk1_0::Offset3D; 2]) -> Self {
        self.0.src_offsets = src_offsets as _;
        self
    }
    #[inline]
    pub fn dst_subresource(
        mut self,
        dst_subresource: crate::vk1_0::ImageSubresourceLayers,
    ) -> Self {
        self.0.dst_subresource = dst_subresource as _;
        self
    }
    #[inline]
    pub fn dst_offsets(mut self, dst_offsets: [crate::vk1_0::Offset3D; 2]) -> Self {
        self.0.dst_offsets = dst_offsets as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageBlit {
        self.0
    }
}
impl<'a> std::default::Default for ImageBlitBuilder<'a> {
    fn default() -> ImageBlitBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageBlitBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageBlitBuilder<'a> {
    type Target = ImageBlit;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageBlitBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferImageCopy.html) · Structure"]
#[doc(alias = "VkBufferImageCopy")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct BufferImageCopy {
    pub buffer_offset: crate::vk1_0::DeviceSize,
    pub buffer_row_length: u32,
    pub buffer_image_height: u32,
    pub image_subresource: crate::vk1_0::ImageSubresourceLayers,
    pub image_offset: crate::vk1_0::Offset3D,
    pub image_extent: crate::vk1_0::Extent3D,
}
impl Default for BufferImageCopy {
    fn default() -> Self {
        Self {
            buffer_offset: Default::default(),
            buffer_row_length: Default::default(),
            buffer_image_height: Default::default(),
            image_subresource: Default::default(),
            image_offset: Default::default(),
            image_extent: Default::default(),
        }
    }
}
impl std::fmt::Debug for BufferImageCopy {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("BufferImageCopy")
            .field("buffer_offset", &self.buffer_offset)
            .field("buffer_row_length", &self.buffer_row_length)
            .field("buffer_image_height", &self.buffer_image_height)
            .field("image_subresource", &self.image_subresource)
            .field("image_offset", &self.image_offset)
            .field("image_extent", &self.image_extent)
            .finish()
    }
}
impl BufferImageCopy {
    #[inline]
    pub fn into_builder<'a>(self) -> BufferImageCopyBuilder<'a> {
        BufferImageCopyBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkBufferImageCopy.html) · Builder of [`BufferImageCopy`]"]
#[repr(transparent)]
pub struct BufferImageCopyBuilder<'a>(BufferImageCopy, std::marker::PhantomData<&'a ()>);
impl<'a> BufferImageCopyBuilder<'a> {
    #[inline]
    pub fn new() -> BufferImageCopyBuilder<'a> {
        BufferImageCopyBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn buffer_offset(mut self, buffer_offset: crate::vk1_0::DeviceSize) -> Self {
        self.0.buffer_offset = buffer_offset as _;
        self
    }
    #[inline]
    pub fn buffer_row_length(mut self, buffer_row_length: u32) -> Self {
        self.0.buffer_row_length = buffer_row_length as _;
        self
    }
    #[inline]
    pub fn buffer_image_height(mut self, buffer_image_height: u32) -> Self {
        self.0.buffer_image_height = buffer_image_height as _;
        self
    }
    #[inline]
    pub fn image_subresource(
        mut self,
        image_subresource: crate::vk1_0::ImageSubresourceLayers,
    ) -> Self {
        self.0.image_subresource = image_subresource as _;
        self
    }
    #[inline]
    pub fn image_offset(mut self, image_offset: crate::vk1_0::Offset3D) -> Self {
        self.0.image_offset = image_offset as _;
        self
    }
    #[inline]
    pub fn image_extent(mut self, image_extent: crate::vk1_0::Extent3D) -> Self {
        self.0.image_extent = image_extent as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> BufferImageCopy {
        self.0
    }
}
impl<'a> std::default::Default for BufferImageCopyBuilder<'a> {
    fn default() -> BufferImageCopyBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for BufferImageCopyBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for BufferImageCopyBuilder<'a> {
    type Target = BufferImageCopy;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for BufferImageCopyBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageResolve.html) · Structure"]
#[doc(alias = "VkImageResolve")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ImageResolve {
    pub src_subresource: crate::vk1_0::ImageSubresourceLayers,
    pub src_offset: crate::vk1_0::Offset3D,
    pub dst_subresource: crate::vk1_0::ImageSubresourceLayers,
    pub dst_offset: crate::vk1_0::Offset3D,
    pub extent: crate::vk1_0::Extent3D,
}
impl Default for ImageResolve {
    fn default() -> Self {
        Self {
            src_subresource: Default::default(),
            src_offset: Default::default(),
            dst_subresource: Default::default(),
            dst_offset: Default::default(),
            extent: Default::default(),
        }
    }
}
impl std::fmt::Debug for ImageResolve {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ImageResolve")
            .field("src_subresource", &self.src_subresource)
            .field("src_offset", &self.src_offset)
            .field("dst_subresource", &self.dst_subresource)
            .field("dst_offset", &self.dst_offset)
            .field("extent", &self.extent)
            .finish()
    }
}
impl ImageResolve {
    #[inline]
    pub fn into_builder<'a>(self) -> ImageResolveBuilder<'a> {
        ImageResolveBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkImageResolve.html) · Builder of [`ImageResolve`]"]
#[repr(transparent)]
pub struct ImageResolveBuilder<'a>(ImageResolve, std::marker::PhantomData<&'a ()>);
impl<'a> ImageResolveBuilder<'a> {
    #[inline]
    pub fn new() -> ImageResolveBuilder<'a> {
        ImageResolveBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn src_subresource(
        mut self,
        src_subresource: crate::vk1_0::ImageSubresourceLayers,
    ) -> Self {
        self.0.src_subresource = src_subresource as _;
        self
    }
    #[inline]
    pub fn src_offset(mut self, src_offset: crate::vk1_0::Offset3D) -> Self {
        self.0.src_offset = src_offset as _;
        self
    }
    #[inline]
    pub fn dst_subresource(
        mut self,
        dst_subresource: crate::vk1_0::ImageSubresourceLayers,
    ) -> Self {
        self.0.dst_subresource = dst_subresource as _;
        self
    }
    #[inline]
    pub fn dst_offset(mut self, dst_offset: crate::vk1_0::Offset3D) -> Self {
        self.0.dst_offset = dst_offset as _;
        self
    }
    #[inline]
    pub fn extent(mut self, extent: crate::vk1_0::Extent3D) -> Self {
        self.0.extent = extent as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ImageResolve {
        self.0
    }
}
impl<'a> std::default::Default for ImageResolveBuilder<'a> {
    fn default() -> ImageResolveBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ImageResolveBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ImageResolveBuilder<'a> {
    type Target = ImageResolve;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ImageResolveBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkShaderModuleCreateInfo.html) · Structure"]
#[doc(alias = "VkShaderModuleCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ShaderModuleCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::ShaderModuleCreateFlags,
    pub code_size: usize,
    pub p_code: *const u32,
}
impl Default for ShaderModuleCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::SHADER_MODULE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            code_size: Default::default(),
            p_code: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for ShaderModuleCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ShaderModuleCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("code_size", &self.code_size)
            .field("p_code", &self.p_code)
            .finish()
    }
}
impl ShaderModuleCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> ShaderModuleCreateInfoBuilder<'a> {
        ShaderModuleCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_validation_cache::ShaderModuleValidationCacheCreateInfoEXT,
    > for ShaderModuleCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_validation_cache::ShaderModuleValidationCacheCreateInfoEXTBuilder<
            '_,
        >,
    > for ShaderModuleCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkShaderModuleCreateInfo.html) · Builder of [`ShaderModuleCreateInfo`]"]
#[repr(transparent)]
pub struct ShaderModuleCreateInfoBuilder<'a>(
    ShaderModuleCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> ShaderModuleCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> ShaderModuleCreateInfoBuilder<'a> {
        ShaderModuleCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::ShaderModuleCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn code(mut self, code: &'a [u32]) -> Self {
        self.0.p_code = code.as_ptr() as _;
        self.0.code_size = code.len() * 4;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ShaderModuleCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for ShaderModuleCreateInfoBuilder<'a> {
    fn default() -> ShaderModuleCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ShaderModuleCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ShaderModuleCreateInfoBuilder<'a> {
    type Target = ShaderModuleCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ShaderModuleCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSetLayoutBinding.html) · Structure"]
#[doc(alias = "VkDescriptorSetLayoutBinding")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DescriptorSetLayoutBinding {
    pub binding: u32,
    pub descriptor_type: crate::vk1_0::DescriptorType,
    pub descriptor_count: u32,
    pub stage_flags: crate::vk1_0::ShaderStageFlags,
    pub p_immutable_samplers: *const crate::vk1_0::Sampler,
}
impl Default for DescriptorSetLayoutBinding {
    fn default() -> Self {
        Self {
            binding: Default::default(),
            descriptor_type: Default::default(),
            descriptor_count: Default::default(),
            stage_flags: Default::default(),
            p_immutable_samplers: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for DescriptorSetLayoutBinding {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DescriptorSetLayoutBinding")
            .field("binding", &self.binding)
            .field("descriptor_type", &self.descriptor_type)
            .field("descriptor_count", &self.descriptor_count)
            .field("stage_flags", &self.stage_flags)
            .field("p_immutable_samplers", &self.p_immutable_samplers)
            .finish()
    }
}
impl DescriptorSetLayoutBinding {
    #[inline]
    pub fn into_builder<'a>(self) -> DescriptorSetLayoutBindingBuilder<'a> {
        DescriptorSetLayoutBindingBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSetLayoutBinding.html) · Builder of [`DescriptorSetLayoutBinding`]"]
#[repr(transparent)]
pub struct DescriptorSetLayoutBindingBuilder<'a>(
    DescriptorSetLayoutBinding,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> DescriptorSetLayoutBindingBuilder<'a> {
    #[inline]
    pub fn new() -> DescriptorSetLayoutBindingBuilder<'a> {
        DescriptorSetLayoutBindingBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn binding(mut self, binding: u32) -> Self {
        self.0.binding = binding as _;
        self
    }
    #[inline]
    pub fn descriptor_type(mut self, descriptor_type: crate::vk1_0::DescriptorType) -> Self {
        self.0.descriptor_type = descriptor_type as _;
        self
    }
    #[inline]
    pub fn descriptor_count(mut self, descriptor_count: u32) -> Self {
        self.0.descriptor_count = descriptor_count as _;
        self
    }
    #[inline]
    pub fn stage_flags(mut self, stage_flags: crate::vk1_0::ShaderStageFlags) -> Self {
        self.0.stage_flags = stage_flags as _;
        self
    }
    #[inline]
    pub fn immutable_samplers(mut self, immutable_samplers: &'a [crate::vk1_0::Sampler]) -> Self {
        self.0.p_immutable_samplers = immutable_samplers.as_ptr() as _;
        self.0.descriptor_count = immutable_samplers.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DescriptorSetLayoutBinding {
        self.0
    }
}
impl<'a> std::default::Default for DescriptorSetLayoutBindingBuilder<'a> {
    fn default() -> DescriptorSetLayoutBindingBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DescriptorSetLayoutBindingBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DescriptorSetLayoutBindingBuilder<'a> {
    type Target = DescriptorSetLayoutBinding;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DescriptorSetLayoutBindingBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSetLayoutCreateInfo.html) · Structure"]
#[doc(alias = "VkDescriptorSetLayoutCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DescriptorSetLayoutCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::DescriptorSetLayoutCreateFlags,
    pub binding_count: u32,
    pub p_bindings: *const crate::vk1_0::DescriptorSetLayoutBinding,
}
impl Default for DescriptorSetLayoutCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            binding_count: Default::default(),
            p_bindings: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for DescriptorSetLayoutCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DescriptorSetLayoutCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("binding_count", &self.binding_count)
            .field("p_bindings", &self.p_bindings)
            .finish()
    }
}
impl DescriptorSetLayoutCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> DescriptorSetLayoutCreateInfoBuilder<'a> {
        DescriptorSetLayoutCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::DescriptorSetLayoutBindingFlagsCreateInfo>
    for DescriptorSetLayoutCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::vk1_2::DescriptorSetLayoutBindingFlagsCreateInfoBuilder<'_>>
    for DescriptorSetLayoutCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::valve_mutable_descriptor_type::MutableDescriptorTypeCreateInfoVALVE,
    > for DescriptorSetLayoutCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: valve_mutable_descriptor_type :: MutableDescriptorTypeCreateInfoVALVEBuilder < '_ >> for DescriptorSetLayoutCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSetLayoutCreateInfo.html) · Builder of [`DescriptorSetLayoutCreateInfo`]"]
#[repr(transparent)]
pub struct DescriptorSetLayoutCreateInfoBuilder<'a>(
    DescriptorSetLayoutCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> DescriptorSetLayoutCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> DescriptorSetLayoutCreateInfoBuilder<'a> {
        DescriptorSetLayoutCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::DescriptorSetLayoutCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn bindings(
        mut self,
        bindings: &'a [crate::vk1_0::DescriptorSetLayoutBindingBuilder],
    ) -> Self {
        self.0.p_bindings = bindings.as_ptr() as _;
        self.0.binding_count = bindings.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DescriptorSetLayoutCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for DescriptorSetLayoutCreateInfoBuilder<'a> {
    fn default() -> DescriptorSetLayoutCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DescriptorSetLayoutCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DescriptorSetLayoutCreateInfoBuilder<'a> {
    type Target = DescriptorSetLayoutCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DescriptorSetLayoutCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorPoolSize.html) · Structure"]
#[doc(alias = "VkDescriptorPoolSize")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DescriptorPoolSize {
    pub _type: crate::vk1_0::DescriptorType,
    pub descriptor_count: u32,
}
impl Default for DescriptorPoolSize {
    fn default() -> Self {
        Self {
            _type: Default::default(),
            descriptor_count: Default::default(),
        }
    }
}
impl std::fmt::Debug for DescriptorPoolSize {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DescriptorPoolSize")
            .field("_type", &self._type)
            .field("descriptor_count", &self.descriptor_count)
            .finish()
    }
}
impl DescriptorPoolSize {
    #[inline]
    pub fn into_builder<'a>(self) -> DescriptorPoolSizeBuilder<'a> {
        DescriptorPoolSizeBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorPoolSize.html) · Builder of [`DescriptorPoolSize`]"]
#[repr(transparent)]
pub struct DescriptorPoolSizeBuilder<'a>(DescriptorPoolSize, std::marker::PhantomData<&'a ()>);
impl<'a> DescriptorPoolSizeBuilder<'a> {
    #[inline]
    pub fn new() -> DescriptorPoolSizeBuilder<'a> {
        DescriptorPoolSizeBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn _type(mut self, _type: crate::vk1_0::DescriptorType) -> Self {
        self.0._type = _type as _;
        self
    }
    #[inline]
    pub fn descriptor_count(mut self, descriptor_count: u32) -> Self {
        self.0.descriptor_count = descriptor_count as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DescriptorPoolSize {
        self.0
    }
}
impl<'a> std::default::Default for DescriptorPoolSizeBuilder<'a> {
    fn default() -> DescriptorPoolSizeBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DescriptorPoolSizeBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DescriptorPoolSizeBuilder<'a> {
    type Target = DescriptorPoolSize;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DescriptorPoolSizeBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorPoolCreateInfo.html) · Structure"]
#[doc(alias = "VkDescriptorPoolCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DescriptorPoolCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::DescriptorPoolCreateFlags,
    pub max_sets: u32,
    pub pool_size_count: u32,
    pub p_pool_sizes: *const crate::vk1_0::DescriptorPoolSize,
}
impl Default for DescriptorPoolCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::DESCRIPTOR_POOL_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            max_sets: Default::default(),
            pool_size_count: Default::default(),
            p_pool_sizes: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for DescriptorPoolCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DescriptorPoolCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("max_sets", &self.max_sets)
            .field("pool_size_count", &self.pool_size_count)
            .field("p_pool_sizes", &self.p_pool_sizes)
            .finish()
    }
}
impl DescriptorPoolCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> DescriptorPoolCreateInfoBuilder<'a> {
        DescriptorPoolCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_inline_uniform_block::DescriptorPoolInlineUniformBlockCreateInfoEXT,
    > for DescriptorPoolCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_inline_uniform_block :: DescriptorPoolInlineUniformBlockCreateInfoEXTBuilder < '_ >> for DescriptorPoolCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::valve_mutable_descriptor_type::MutableDescriptorTypeCreateInfoVALVE,
    > for DescriptorPoolCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: valve_mutable_descriptor_type :: MutableDescriptorTypeCreateInfoVALVEBuilder < '_ >> for DescriptorPoolCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorPoolCreateInfo.html) · Builder of [`DescriptorPoolCreateInfo`]"]
#[repr(transparent)]
pub struct DescriptorPoolCreateInfoBuilder<'a>(
    DescriptorPoolCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> DescriptorPoolCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> DescriptorPoolCreateInfoBuilder<'a> {
        DescriptorPoolCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::DescriptorPoolCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn max_sets(mut self, max_sets: u32) -> Self {
        self.0.max_sets = max_sets as _;
        self
    }
    #[inline]
    pub fn pool_sizes(mut self, pool_sizes: &'a [crate::vk1_0::DescriptorPoolSizeBuilder]) -> Self {
        self.0.p_pool_sizes = pool_sizes.as_ptr() as _;
        self.0.pool_size_count = pool_sizes.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DescriptorPoolCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for DescriptorPoolCreateInfoBuilder<'a> {
    fn default() -> DescriptorPoolCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DescriptorPoolCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DescriptorPoolCreateInfoBuilder<'a> {
    type Target = DescriptorPoolCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DescriptorPoolCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSetAllocateInfo.html) · Structure"]
#[doc(alias = "VkDescriptorSetAllocateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DescriptorSetAllocateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub descriptor_pool: crate::vk1_0::DescriptorPool,
    pub descriptor_set_count: u32,
    pub p_set_layouts: *const crate::vk1_0::DescriptorSetLayout,
}
impl Default for DescriptorSetAllocateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::DESCRIPTOR_SET_ALLOCATE_INFO,
            p_next: std::ptr::null(),
            descriptor_pool: Default::default(),
            descriptor_set_count: Default::default(),
            p_set_layouts: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for DescriptorSetAllocateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DescriptorSetAllocateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("descriptor_pool", &self.descriptor_pool)
            .field("descriptor_set_count", &self.descriptor_set_count)
            .field("p_set_layouts", &self.p_set_layouts)
            .finish()
    }
}
impl DescriptorSetAllocateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> DescriptorSetAllocateInfoBuilder<'a> {
        DescriptorSetAllocateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::DescriptorSetVariableDescriptorCountAllocateInfo>
    for DescriptorSetAllocateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::vk1_2::DescriptorSetVariableDescriptorCountAllocateInfoBuilder<'_>,
    > for DescriptorSetAllocateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDescriptorSetAllocateInfo.html) · Builder of [`DescriptorSetAllocateInfo`]"]
#[repr(transparent)]
pub struct DescriptorSetAllocateInfoBuilder<'a>(
    DescriptorSetAllocateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> DescriptorSetAllocateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> DescriptorSetAllocateInfoBuilder<'a> {
        DescriptorSetAllocateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn descriptor_pool(mut self, descriptor_pool: crate::vk1_0::DescriptorPool) -> Self {
        self.0.descriptor_pool = descriptor_pool as _;
        self
    }
    #[inline]
    pub fn set_layouts(mut self, set_layouts: &'a [crate::vk1_0::DescriptorSetLayout]) -> Self {
        self.0.p_set_layouts = set_layouts.as_ptr() as _;
        self.0.descriptor_set_count = set_layouts.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DescriptorSetAllocateInfo {
        self.0
    }
}
impl<'a> std::default::Default for DescriptorSetAllocateInfoBuilder<'a> {
    fn default() -> DescriptorSetAllocateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DescriptorSetAllocateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DescriptorSetAllocateInfoBuilder<'a> {
    type Target = DescriptorSetAllocateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DescriptorSetAllocateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSpecializationMapEntry.html) · Structure"]
#[doc(alias = "VkSpecializationMapEntry")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SpecializationMapEntry {
    pub constant_id: u32,
    pub offset: u32,
    pub size: usize,
}
impl Default for SpecializationMapEntry {
    fn default() -> Self {
        Self {
            constant_id: Default::default(),
            offset: Default::default(),
            size: Default::default(),
        }
    }
}
impl std::fmt::Debug for SpecializationMapEntry {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SpecializationMapEntry")
            .field("constant_id", &self.constant_id)
            .field("offset", &self.offset)
            .field("size", &self.size)
            .finish()
    }
}
impl SpecializationMapEntry {
    #[inline]
    pub fn into_builder<'a>(self) -> SpecializationMapEntryBuilder<'a> {
        SpecializationMapEntryBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSpecializationMapEntry.html) · Builder of [`SpecializationMapEntry`]"]
#[repr(transparent)]
pub struct SpecializationMapEntryBuilder<'a>(
    SpecializationMapEntry,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> SpecializationMapEntryBuilder<'a> {
    #[inline]
    pub fn new() -> SpecializationMapEntryBuilder<'a> {
        SpecializationMapEntryBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn constant_id(mut self, constant_id: u32) -> Self {
        self.0.constant_id = constant_id as _;
        self
    }
    #[inline]
    pub fn offset(mut self, offset: u32) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    pub fn size(mut self, size: usize) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SpecializationMapEntry {
        self.0
    }
}
impl<'a> std::default::Default for SpecializationMapEntryBuilder<'a> {
    fn default() -> SpecializationMapEntryBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SpecializationMapEntryBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SpecializationMapEntryBuilder<'a> {
    type Target = SpecializationMapEntry;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SpecializationMapEntryBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSpecializationInfo.html) · Structure"]
#[doc(alias = "VkSpecializationInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SpecializationInfo {
    pub map_entry_count: u32,
    pub p_map_entries: *const crate::vk1_0::SpecializationMapEntry,
    pub data_size: usize,
    pub p_data: *const std::ffi::c_void,
}
impl Default for SpecializationInfo {
    fn default() -> Self {
        Self {
            map_entry_count: Default::default(),
            p_map_entries: std::ptr::null(),
            data_size: Default::default(),
            p_data: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for SpecializationInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SpecializationInfo")
            .field("map_entry_count", &self.map_entry_count)
            .field("p_map_entries", &self.p_map_entries)
            .field("data_size", &self.data_size)
            .field("p_data", &self.p_data)
            .finish()
    }
}
impl SpecializationInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> SpecializationInfoBuilder<'a> {
        SpecializationInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSpecializationInfo.html) · Builder of [`SpecializationInfo`]"]
#[repr(transparent)]
pub struct SpecializationInfoBuilder<'a>(SpecializationInfo, std::marker::PhantomData<&'a ()>);
impl<'a> SpecializationInfoBuilder<'a> {
    #[inline]
    pub fn new() -> SpecializationInfoBuilder<'a> {
        SpecializationInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn map_entries(
        mut self,
        map_entries: &'a [crate::vk1_0::SpecializationMapEntryBuilder],
    ) -> Self {
        self.0.p_map_entries = map_entries.as_ptr() as _;
        self.0.map_entry_count = map_entries.len() as _;
        self
    }
    #[inline]
    pub fn data_size(mut self, data_size: usize) -> Self {
        self.0.data_size = data_size;
        self
    }
    #[inline]
    pub fn data(mut self, data: *const std::ffi::c_void) -> Self {
        self.0.p_data = data;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SpecializationInfo {
        self.0
    }
}
impl<'a> std::default::Default for SpecializationInfoBuilder<'a> {
    fn default() -> SpecializationInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SpecializationInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SpecializationInfoBuilder<'a> {
    type Target = SpecializationInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SpecializationInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineShaderStageCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineShaderStageCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineShaderStageCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineShaderStageCreateFlags,
    pub stage: crate::vk1_0::ShaderStageFlagBits,
    pub module: crate::vk1_0::ShaderModule,
    pub p_name: *const std::os::raw::c_char,
    pub p_specialization_info: *const crate::vk1_0::SpecializationInfo,
}
impl Default for PipelineShaderStageCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_SHADER_STAGE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            stage: Default::default(),
            module: Default::default(),
            p_name: std::ptr::null(),
            p_specialization_info: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for PipelineShaderStageCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineShaderStageCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("stage", &self.stage)
            .field("module", &self.module)
            .field("p_name", &self.p_name)
            .field("p_specialization_info", &self.p_specialization_info)
            .finish()
    }
}
impl PipelineShaderStageCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineShaderStageCreateInfoBuilder<'a> {
        PipelineShaderStageCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_subgroup_size_control :: PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT > for PipelineShaderStageCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_subgroup_size_control :: PipelineShaderStageRequiredSubgroupSizeCreateInfoEXTBuilder < '_ >> for PipelineShaderStageCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineShaderStageCreateInfo.html) · Builder of [`PipelineShaderStageCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineShaderStageCreateInfoBuilder<'a>(
    PipelineShaderStageCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineShaderStageCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineShaderStageCreateInfoBuilder<'a> {
        PipelineShaderStageCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineShaderStageCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn stage(mut self, stage: crate::vk1_0::ShaderStageFlagBits) -> Self {
        self.0.stage = stage as _;
        self
    }
    #[inline]
    pub fn module(mut self, module: crate::vk1_0::ShaderModule) -> Self {
        self.0.module = module as _;
        self
    }
    #[inline]
    pub fn name(mut self, name: &'a std::ffi::CStr) -> Self {
        self.0.p_name = name.as_ptr();
        self
    }
    #[inline]
    pub fn specialization_info(
        mut self,
        specialization_info: &'a crate::vk1_0::SpecializationInfo,
    ) -> Self {
        self.0.p_specialization_info = specialization_info as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineShaderStageCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineShaderStageCreateInfoBuilder<'a> {
    fn default() -> PipelineShaderStageCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineShaderStageCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineShaderStageCreateInfoBuilder<'a> {
    type Target = PipelineShaderStageCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineShaderStageCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkComputePipelineCreateInfo.html) · Structure"]
#[doc(alias = "VkComputePipelineCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ComputePipelineCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineCreateFlags,
    pub stage: crate::vk1_0::PipelineShaderStageCreateInfo,
    pub layout: crate::vk1_0::PipelineLayout,
    pub base_pipeline_handle: crate::vk1_0::Pipeline,
    pub base_pipeline_index: i32,
}
impl Default for ComputePipelineCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::COMPUTE_PIPELINE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            stage: Default::default(),
            layout: Default::default(),
            base_pipeline_handle: Default::default(),
            base_pipeline_index: Default::default(),
        }
    }
}
impl std::fmt::Debug for ComputePipelineCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ComputePipelineCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("stage", &self.stage)
            .field("layout", &self.layout)
            .field("base_pipeline_handle", &self.base_pipeline_handle)
            .field("base_pipeline_index", &self.base_pipeline_index)
            .finish()
    }
}
impl ComputePipelineCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> ComputePipelineCreateInfoBuilder<'a> {
        ComputePipelineCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_pipeline_creation_feedback::PipelineCreationFeedbackCreateInfoEXT,
    > for ComputePipelineCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_pipeline_creation_feedback :: PipelineCreationFeedbackCreateInfoEXTBuilder < '_ >> for ComputePipelineCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::amd_pipeline_compiler_control::PipelineCompilerControlCreateInfoAMD,
    > for ComputePipelineCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: amd_pipeline_compiler_control :: PipelineCompilerControlCreateInfoAMDBuilder < '_ >> for ComputePipelineCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkComputePipelineCreateInfo.html) · Builder of [`ComputePipelineCreateInfo`]"]
#[repr(transparent)]
pub struct ComputePipelineCreateInfoBuilder<'a>(
    ComputePipelineCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> ComputePipelineCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> ComputePipelineCreateInfoBuilder<'a> {
        ComputePipelineCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn stage(mut self, stage: crate::vk1_0::PipelineShaderStageCreateInfo) -> Self {
        self.0.stage = stage as _;
        self
    }
    #[inline]
    pub fn layout(mut self, layout: crate::vk1_0::PipelineLayout) -> Self {
        self.0.layout = layout as _;
        self
    }
    #[inline]
    pub fn base_pipeline_handle(mut self, base_pipeline_handle: crate::vk1_0::Pipeline) -> Self {
        self.0.base_pipeline_handle = base_pipeline_handle as _;
        self
    }
    #[inline]
    pub fn base_pipeline_index(mut self, base_pipeline_index: i32) -> Self {
        self.0.base_pipeline_index = base_pipeline_index as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ComputePipelineCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for ComputePipelineCreateInfoBuilder<'a> {
    fn default() -> ComputePipelineCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ComputePipelineCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ComputePipelineCreateInfoBuilder<'a> {
    type Target = ComputePipelineCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ComputePipelineCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkVertexInputBindingDescription.html) · Structure"]
#[doc(alias = "VkVertexInputBindingDescription")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct VertexInputBindingDescription {
    pub binding: u32,
    pub stride: u32,
    pub input_rate: crate::vk1_0::VertexInputRate,
}
impl Default for VertexInputBindingDescription {
    fn default() -> Self {
        Self {
            binding: Default::default(),
            stride: Default::default(),
            input_rate: Default::default(),
        }
    }
}
impl std::fmt::Debug for VertexInputBindingDescription {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("VertexInputBindingDescription")
            .field("binding", &self.binding)
            .field("stride", &self.stride)
            .field("input_rate", &self.input_rate)
            .finish()
    }
}
impl VertexInputBindingDescription {
    #[inline]
    pub fn into_builder<'a>(self) -> VertexInputBindingDescriptionBuilder<'a> {
        VertexInputBindingDescriptionBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkVertexInputBindingDescription.html) · Builder of [`VertexInputBindingDescription`]"]
#[repr(transparent)]
pub struct VertexInputBindingDescriptionBuilder<'a>(
    VertexInputBindingDescription,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> VertexInputBindingDescriptionBuilder<'a> {
    #[inline]
    pub fn new() -> VertexInputBindingDescriptionBuilder<'a> {
        VertexInputBindingDescriptionBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn binding(mut self, binding: u32) -> Self {
        self.0.binding = binding as _;
        self
    }
    #[inline]
    pub fn stride(mut self, stride: u32) -> Self {
        self.0.stride = stride as _;
        self
    }
    #[inline]
    pub fn input_rate(mut self, input_rate: crate::vk1_0::VertexInputRate) -> Self {
        self.0.input_rate = input_rate as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> VertexInputBindingDescription {
        self.0
    }
}
impl<'a> std::default::Default for VertexInputBindingDescriptionBuilder<'a> {
    fn default() -> VertexInputBindingDescriptionBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for VertexInputBindingDescriptionBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for VertexInputBindingDescriptionBuilder<'a> {
    type Target = VertexInputBindingDescription;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for VertexInputBindingDescriptionBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkVertexInputAttributeDescription.html) · Structure"]
#[doc(alias = "VkVertexInputAttributeDescription")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct VertexInputAttributeDescription {
    pub location: u32,
    pub binding: u32,
    pub format: crate::vk1_0::Format,
    pub offset: u32,
}
impl Default for VertexInputAttributeDescription {
    fn default() -> Self {
        Self {
            location: Default::default(),
            binding: Default::default(),
            format: Default::default(),
            offset: Default::default(),
        }
    }
}
impl std::fmt::Debug for VertexInputAttributeDescription {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("VertexInputAttributeDescription")
            .field("location", &self.location)
            .field("binding", &self.binding)
            .field("format", &self.format)
            .field("offset", &self.offset)
            .finish()
    }
}
impl VertexInputAttributeDescription {
    #[inline]
    pub fn into_builder<'a>(self) -> VertexInputAttributeDescriptionBuilder<'a> {
        VertexInputAttributeDescriptionBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkVertexInputAttributeDescription.html) · Builder of [`VertexInputAttributeDescription`]"]
#[repr(transparent)]
pub struct VertexInputAttributeDescriptionBuilder<'a>(
    VertexInputAttributeDescription,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> VertexInputAttributeDescriptionBuilder<'a> {
    #[inline]
    pub fn new() -> VertexInputAttributeDescriptionBuilder<'a> {
        VertexInputAttributeDescriptionBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn location(mut self, location: u32) -> Self {
        self.0.location = location as _;
        self
    }
    #[inline]
    pub fn binding(mut self, binding: u32) -> Self {
        self.0.binding = binding as _;
        self
    }
    #[inline]
    pub fn format(mut self, format: crate::vk1_0::Format) -> Self {
        self.0.format = format as _;
        self
    }
    #[inline]
    pub fn offset(mut self, offset: u32) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> VertexInputAttributeDescription {
        self.0
    }
}
impl<'a> std::default::Default for VertexInputAttributeDescriptionBuilder<'a> {
    fn default() -> VertexInputAttributeDescriptionBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for VertexInputAttributeDescriptionBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for VertexInputAttributeDescriptionBuilder<'a> {
    type Target = VertexInputAttributeDescription;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for VertexInputAttributeDescriptionBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineVertexInputStateCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineVertexInputStateCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineVertexInputStateCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineVertexInputStateCreateFlags,
    pub vertex_binding_description_count: u32,
    pub p_vertex_binding_descriptions: *const crate::vk1_0::VertexInputBindingDescription,
    pub vertex_attribute_description_count: u32,
    pub p_vertex_attribute_descriptions: *const crate::vk1_0::VertexInputAttributeDescription,
}
impl Default for PipelineVertexInputStateCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            vertex_binding_description_count: Default::default(),
            p_vertex_binding_descriptions: std::ptr::null(),
            vertex_attribute_description_count: Default::default(),
            p_vertex_attribute_descriptions: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for PipelineVertexInputStateCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineVertexInputStateCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field(
                "vertex_binding_description_count",
                &self.vertex_binding_description_count,
            )
            .field(
                "p_vertex_binding_descriptions",
                &self.p_vertex_binding_descriptions,
            )
            .field(
                "vertex_attribute_description_count",
                &self.vertex_attribute_description_count,
            )
            .field(
                "p_vertex_attribute_descriptions",
                &self.p_vertex_attribute_descriptions,
            )
            .finish()
    }
}
impl PipelineVertexInputStateCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineVertexInputStateCreateInfoBuilder<'a> {
        PipelineVertexInputStateCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_vertex_attribute_divisor :: PipelineVertexInputDivisorStateCreateInfoEXT > for PipelineVertexInputStateCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_vertex_attribute_divisor :: PipelineVertexInputDivisorStateCreateInfoEXTBuilder < '_ >> for PipelineVertexInputStateCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineVertexInputStateCreateInfo.html) · Builder of [`PipelineVertexInputStateCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineVertexInputStateCreateInfoBuilder<'a>(
    PipelineVertexInputStateCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineVertexInputStateCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineVertexInputStateCreateInfoBuilder<'a> {
        PipelineVertexInputStateCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineVertexInputStateCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn vertex_binding_descriptions(
        mut self,
        vertex_binding_descriptions: &'a [crate::vk1_0::VertexInputBindingDescriptionBuilder],
    ) -> Self {
        self.0.p_vertex_binding_descriptions = vertex_binding_descriptions.as_ptr() as _;
        self.0.vertex_binding_description_count = vertex_binding_descriptions.len() as _;
        self
    }
    #[inline]
    pub fn vertex_attribute_descriptions(
        mut self,
        vertex_attribute_descriptions: &'a [crate::vk1_0::VertexInputAttributeDescriptionBuilder],
    ) -> Self {
        self.0.p_vertex_attribute_descriptions = vertex_attribute_descriptions.as_ptr() as _;
        self.0.vertex_attribute_description_count = vertex_attribute_descriptions.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineVertexInputStateCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineVertexInputStateCreateInfoBuilder<'a> {
    fn default() -> PipelineVertexInputStateCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineVertexInputStateCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineVertexInputStateCreateInfoBuilder<'a> {
    type Target = PipelineVertexInputStateCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineVertexInputStateCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineInputAssemblyStateCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineInputAssemblyStateCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineInputAssemblyStateCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineInputAssemblyStateCreateFlags,
    pub topology: crate::vk1_0::PrimitiveTopology,
    pub primitive_restart_enable: crate::vk1_0::Bool32,
}
impl Default for PipelineInputAssemblyStateCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            topology: Default::default(),
            primitive_restart_enable: Default::default(),
        }
    }
}
impl std::fmt::Debug for PipelineInputAssemblyStateCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineInputAssemblyStateCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("topology", &self.topology)
            .field(
                "primitive_restart_enable",
                &(self.primitive_restart_enable != 0),
            )
            .finish()
    }
}
impl PipelineInputAssemblyStateCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineInputAssemblyStateCreateInfoBuilder<'a> {
        PipelineInputAssemblyStateCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineInputAssemblyStateCreateInfo.html) · Builder of [`PipelineInputAssemblyStateCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineInputAssemblyStateCreateInfoBuilder<'a>(
    PipelineInputAssemblyStateCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineInputAssemblyStateCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineInputAssemblyStateCreateInfoBuilder<'a> {
        PipelineInputAssemblyStateCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineInputAssemblyStateCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn topology(mut self, topology: crate::vk1_0::PrimitiveTopology) -> Self {
        self.0.topology = topology as _;
        self
    }
    #[inline]
    pub fn primitive_restart_enable(mut self, primitive_restart_enable: bool) -> Self {
        self.0.primitive_restart_enable = primitive_restart_enable as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineInputAssemblyStateCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineInputAssemblyStateCreateInfoBuilder<'a> {
    fn default() -> PipelineInputAssemblyStateCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineInputAssemblyStateCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineInputAssemblyStateCreateInfoBuilder<'a> {
    type Target = PipelineInputAssemblyStateCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineInputAssemblyStateCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineTessellationStateCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineTessellationStateCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineTessellationStateCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineTessellationStateCreateFlags,
    pub patch_control_points: u32,
}
impl Default for PipelineTessellationStateCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_TESSELLATION_STATE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            patch_control_points: Default::default(),
        }
    }
}
impl std::fmt::Debug for PipelineTessellationStateCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineTessellationStateCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("patch_control_points", &self.patch_control_points)
            .finish()
    }
}
impl PipelineTessellationStateCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineTessellationStateCreateInfoBuilder<'a> {
        PipelineTessellationStateCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::PipelineTessellationDomainOriginStateCreateInfo>
    for PipelineTessellationStateCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::vk1_1::PipelineTessellationDomainOriginStateCreateInfoBuilder<'_>,
    > for PipelineTessellationStateCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineTessellationStateCreateInfo.html) · Builder of [`PipelineTessellationStateCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineTessellationStateCreateInfoBuilder<'a>(
    PipelineTessellationStateCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineTessellationStateCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineTessellationStateCreateInfoBuilder<'a> {
        PipelineTessellationStateCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineTessellationStateCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn patch_control_points(mut self, patch_control_points: u32) -> Self {
        self.0.patch_control_points = patch_control_points as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineTessellationStateCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineTessellationStateCreateInfoBuilder<'a> {
    fn default() -> PipelineTessellationStateCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineTessellationStateCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineTessellationStateCreateInfoBuilder<'a> {
    type Target = PipelineTessellationStateCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineTessellationStateCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineViewportStateCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineViewportStateCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineViewportStateCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineViewportStateCreateFlags,
    pub viewport_count: u32,
    pub p_viewports: *const crate::vk1_0::Viewport,
    pub scissor_count: u32,
    pub p_scissors: *const crate::vk1_0::Rect2D,
}
impl Default for PipelineViewportStateCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_VIEWPORT_STATE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            viewport_count: Default::default(),
            p_viewports: std::ptr::null(),
            scissor_count: Default::default(),
            p_scissors: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for PipelineViewportStateCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineViewportStateCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("viewport_count", &self.viewport_count)
            .field("p_viewports", &self.p_viewports)
            .field("scissor_count", &self.scissor_count)
            .field("p_scissors", &self.p_scissors)
            .finish()
    }
}
impl PipelineViewportStateCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineViewportStateCreateInfoBuilder<'a> {
        PipelineViewportStateCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_clip_space_w_scaling::PipelineViewportWScalingStateCreateInfoNV,
    > for PipelineViewportStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_clip_space_w_scaling :: PipelineViewportWScalingStateCreateInfoNVBuilder < '_ >> for PipelineViewportStateCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_viewport_swizzle::PipelineViewportSwizzleStateCreateInfoNV,
    > for PipelineViewportStateCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_viewport_swizzle::PipelineViewportSwizzleStateCreateInfoNVBuilder<'_>,
    > for PipelineViewportStateCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_scissor_exclusive::PipelineViewportExclusiveScissorStateCreateInfoNV,
    > for PipelineViewportStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_scissor_exclusive :: PipelineViewportExclusiveScissorStateCreateInfoNVBuilder < '_ >> for PipelineViewportStateCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_shading_rate_image::PipelineViewportShadingRateImageStateCreateInfoNV,
    > for PipelineViewportStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_shading_rate_image :: PipelineViewportShadingRateImageStateCreateInfoNVBuilder < '_ >> for PipelineViewportStateCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_shading_rate_image :: PipelineViewportCoarseSampleOrderStateCreateInfoNV > for PipelineViewportStateCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_shading_rate_image :: PipelineViewportCoarseSampleOrderStateCreateInfoNVBuilder < '_ >> for PipelineViewportStateCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineViewportStateCreateInfo.html) · Builder of [`PipelineViewportStateCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineViewportStateCreateInfoBuilder<'a>(
    PipelineViewportStateCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineViewportStateCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineViewportStateCreateInfoBuilder<'a> {
        PipelineViewportStateCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineViewportStateCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn viewport_count(mut self, viewport_count: u32) -> Self {
        self.0.viewport_count = viewport_count as _;
        self
    }
    #[inline]
    pub fn viewports(mut self, viewports: &'a [crate::vk1_0::ViewportBuilder]) -> Self {
        self.0.p_viewports = viewports.as_ptr() as _;
        self.0.viewport_count = viewports.len() as _;
        self
    }
    #[inline]
    pub fn scissor_count(mut self, scissor_count: u32) -> Self {
        self.0.scissor_count = scissor_count as _;
        self
    }
    #[inline]
    pub fn scissors(mut self, scissors: &'a [crate::vk1_0::Rect2DBuilder]) -> Self {
        self.0.p_scissors = scissors.as_ptr() as _;
        self.0.scissor_count = scissors.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineViewportStateCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineViewportStateCreateInfoBuilder<'a> {
    fn default() -> PipelineViewportStateCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineViewportStateCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineViewportStateCreateInfoBuilder<'a> {
    type Target = PipelineViewportStateCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineViewportStateCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineRasterizationStateCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineRasterizationStateCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineRasterizationStateCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineRasterizationStateCreateFlags,
    pub depth_clamp_enable: crate::vk1_0::Bool32,
    pub rasterizer_discard_enable: crate::vk1_0::Bool32,
    pub polygon_mode: crate::vk1_0::PolygonMode,
    pub cull_mode: crate::vk1_0::CullModeFlags,
    pub front_face: crate::vk1_0::FrontFace,
    pub depth_bias_enable: crate::vk1_0::Bool32,
    pub depth_bias_constant_factor: std::os::raw::c_float,
    pub depth_bias_clamp: std::os::raw::c_float,
    pub depth_bias_slope_factor: std::os::raw::c_float,
    pub line_width: std::os::raw::c_float,
}
impl Default for PipelineRasterizationStateCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            depth_clamp_enable: Default::default(),
            rasterizer_discard_enable: Default::default(),
            polygon_mode: Default::default(),
            cull_mode: Default::default(),
            front_face: Default::default(),
            depth_bias_enable: Default::default(),
            depth_bias_constant_factor: Default::default(),
            depth_bias_clamp: Default::default(),
            depth_bias_slope_factor: Default::default(),
            line_width: Default::default(),
        }
    }
}
impl std::fmt::Debug for PipelineRasterizationStateCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineRasterizationStateCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("depth_clamp_enable", &(self.depth_clamp_enable != 0))
            .field(
                "rasterizer_discard_enable",
                &(self.rasterizer_discard_enable != 0),
            )
            .field("polygon_mode", &self.polygon_mode)
            .field("cull_mode", &self.cull_mode)
            .field("front_face", &self.front_face)
            .field("depth_bias_enable", &(self.depth_bias_enable != 0))
            .field(
                "depth_bias_constant_factor",
                &self.depth_bias_constant_factor,
            )
            .field("depth_bias_clamp", &self.depth_bias_clamp)
            .field("depth_bias_slope_factor", &self.depth_bias_slope_factor)
            .field("line_width", &self.line_width)
            .finish()
    }
}
impl PipelineRasterizationStateCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineRasterizationStateCreateInfoBuilder<'a> {
        PipelineRasterizationStateCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::amd_rasterization_order::PipelineRasterizationStateRasterizationOrderAMD,
    > for PipelineRasterizationStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: amd_rasterization_order :: PipelineRasterizationStateRasterizationOrderAMDBuilder < '_ >> for PipelineRasterizationStateCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_conservative_rasterization :: PipelineRasterizationConservativeStateCreateInfoEXT > for PipelineRasterizationStateCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_conservative_rasterization :: PipelineRasterizationConservativeStateCreateInfoEXTBuilder < '_ >> for PipelineRasterizationStateCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_transform_feedback::PipelineRasterizationStateStreamCreateInfoEXT,
    > for PipelineRasterizationStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_transform_feedback :: PipelineRasterizationStateStreamCreateInfoEXTBuilder < '_ >> for PipelineRasterizationStateCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_depth_clip_enable::PipelineRasterizationDepthClipStateCreateInfoEXT,
    > for PipelineRasterizationStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_depth_clip_enable :: PipelineRasterizationDepthClipStateCreateInfoEXTBuilder < '_ >> for PipelineRasterizationStateCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_line_rasterization::PipelineRasterizationLineStateCreateInfoEXT,
    > for PipelineRasterizationStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_line_rasterization :: PipelineRasterizationLineStateCreateInfoEXTBuilder < '_ >> for PipelineRasterizationStateCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineRasterizationStateCreateInfo.html) · Builder of [`PipelineRasterizationStateCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineRasterizationStateCreateInfoBuilder<'a>(
    PipelineRasterizationStateCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineRasterizationStateCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineRasterizationStateCreateInfoBuilder<'a> {
        PipelineRasterizationStateCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineRasterizationStateCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn depth_clamp_enable(mut self, depth_clamp_enable: bool) -> Self {
        self.0.depth_clamp_enable = depth_clamp_enable as _;
        self
    }
    #[inline]
    pub fn rasterizer_discard_enable(mut self, rasterizer_discard_enable: bool) -> Self {
        self.0.rasterizer_discard_enable = rasterizer_discard_enable as _;
        self
    }
    #[inline]
    pub fn polygon_mode(mut self, polygon_mode: crate::vk1_0::PolygonMode) -> Self {
        self.0.polygon_mode = polygon_mode as _;
        self
    }
    #[inline]
    pub fn cull_mode(mut self, cull_mode: crate::vk1_0::CullModeFlags) -> Self {
        self.0.cull_mode = cull_mode as _;
        self
    }
    #[inline]
    pub fn front_face(mut self, front_face: crate::vk1_0::FrontFace) -> Self {
        self.0.front_face = front_face as _;
        self
    }
    #[inline]
    pub fn depth_bias_enable(mut self, depth_bias_enable: bool) -> Self {
        self.0.depth_bias_enable = depth_bias_enable as _;
        self
    }
    #[inline]
    pub fn depth_bias_constant_factor(
        mut self,
        depth_bias_constant_factor: std::os::raw::c_float,
    ) -> Self {
        self.0.depth_bias_constant_factor = depth_bias_constant_factor as _;
        self
    }
    #[inline]
    pub fn depth_bias_clamp(mut self, depth_bias_clamp: std::os::raw::c_float) -> Self {
        self.0.depth_bias_clamp = depth_bias_clamp as _;
        self
    }
    #[inline]
    pub fn depth_bias_slope_factor(
        mut self,
        depth_bias_slope_factor: std::os::raw::c_float,
    ) -> Self {
        self.0.depth_bias_slope_factor = depth_bias_slope_factor as _;
        self
    }
    #[inline]
    pub fn line_width(mut self, line_width: std::os::raw::c_float) -> Self {
        self.0.line_width = line_width as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineRasterizationStateCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineRasterizationStateCreateInfoBuilder<'a> {
    fn default() -> PipelineRasterizationStateCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineRasterizationStateCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineRasterizationStateCreateInfoBuilder<'a> {
    type Target = PipelineRasterizationStateCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineRasterizationStateCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineMultisampleStateCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineMultisampleStateCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineMultisampleStateCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineMultisampleStateCreateFlags,
    pub rasterization_samples: crate::vk1_0::SampleCountFlagBits,
    pub sample_shading_enable: crate::vk1_0::Bool32,
    pub min_sample_shading: std::os::raw::c_float,
    pub p_sample_mask: *const crate::vk1_0::SampleMask,
    pub alpha_to_coverage_enable: crate::vk1_0::Bool32,
    pub alpha_to_one_enable: crate::vk1_0::Bool32,
}
impl Default for PipelineMultisampleStateCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            rasterization_samples: Default::default(),
            sample_shading_enable: Default::default(),
            min_sample_shading: Default::default(),
            p_sample_mask: std::ptr::null(),
            alpha_to_coverage_enable: Default::default(),
            alpha_to_one_enable: Default::default(),
        }
    }
}
impl std::fmt::Debug for PipelineMultisampleStateCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineMultisampleStateCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("rasterization_samples", &self.rasterization_samples)
            .field("sample_shading_enable", &(self.sample_shading_enable != 0))
            .field("min_sample_shading", &self.min_sample_shading)
            .field("p_sample_mask", &self.p_sample_mask)
            .field(
                "alpha_to_coverage_enable",
                &(self.alpha_to_coverage_enable != 0),
            )
            .field("alpha_to_one_enable", &(self.alpha_to_one_enable != 0))
            .finish()
    }
}
impl PipelineMultisampleStateCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineMultisampleStateCreateInfoBuilder<'a> {
        PipelineMultisampleStateCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_fragment_coverage_to_color::PipelineCoverageToColorStateCreateInfoNV,
    > for PipelineMultisampleStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_fragment_coverage_to_color :: PipelineCoverageToColorStateCreateInfoNVBuilder < '_ >> for PipelineMultisampleStateCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_sample_locations::PipelineSampleLocationsStateCreateInfoEXT,
    > for PipelineMultisampleStateCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_sample_locations::PipelineSampleLocationsStateCreateInfoEXTBuilder<
            '_,
        >,
    > for PipelineMultisampleStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_framebuffer_mixed_samples :: PipelineCoverageModulationStateCreateInfoNV > for PipelineMultisampleStateCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_framebuffer_mixed_samples :: PipelineCoverageModulationStateCreateInfoNVBuilder < '_ >> for PipelineMultisampleStateCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_coverage_reduction_mode::PipelineCoverageReductionStateCreateInfoNV,
    > for PipelineMultisampleStateCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_coverage_reduction_mode :: PipelineCoverageReductionStateCreateInfoNVBuilder < '_ >> for PipelineMultisampleStateCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineMultisampleStateCreateInfo.html) · Builder of [`PipelineMultisampleStateCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineMultisampleStateCreateInfoBuilder<'a>(
    PipelineMultisampleStateCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineMultisampleStateCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineMultisampleStateCreateInfoBuilder<'a> {
        PipelineMultisampleStateCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineMultisampleStateCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn rasterization_samples(
        mut self,
        rasterization_samples: crate::vk1_0::SampleCountFlagBits,
    ) -> Self {
        self.0.rasterization_samples = rasterization_samples as _;
        self
    }
    #[inline]
    pub fn sample_shading_enable(mut self, sample_shading_enable: bool) -> Self {
        self.0.sample_shading_enable = sample_shading_enable as _;
        self
    }
    #[inline]
    pub fn min_sample_shading(mut self, min_sample_shading: std::os::raw::c_float) -> Self {
        self.0.min_sample_shading = min_sample_shading as _;
        self
    }
    #[inline]
    pub fn sample_mask(mut self, sample_mask: &'a [crate::vk1_0::SampleMask]) -> Self {
        self.0.p_sample_mask = sample_mask.as_ptr() as _;
        self
    }
    #[inline]
    pub fn alpha_to_coverage_enable(mut self, alpha_to_coverage_enable: bool) -> Self {
        self.0.alpha_to_coverage_enable = alpha_to_coverage_enable as _;
        self
    }
    #[inline]
    pub fn alpha_to_one_enable(mut self, alpha_to_one_enable: bool) -> Self {
        self.0.alpha_to_one_enable = alpha_to_one_enable as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineMultisampleStateCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineMultisampleStateCreateInfoBuilder<'a> {
    fn default() -> PipelineMultisampleStateCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineMultisampleStateCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineMultisampleStateCreateInfoBuilder<'a> {
    type Target = PipelineMultisampleStateCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineMultisampleStateCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineColorBlendAttachmentState.html) · Structure"]
#[doc(alias = "VkPipelineColorBlendAttachmentState")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineColorBlendAttachmentState {
    pub blend_enable: crate::vk1_0::Bool32,
    pub src_color_blend_factor: crate::vk1_0::BlendFactor,
    pub dst_color_blend_factor: crate::vk1_0::BlendFactor,
    pub color_blend_op: crate::vk1_0::BlendOp,
    pub src_alpha_blend_factor: crate::vk1_0::BlendFactor,
    pub dst_alpha_blend_factor: crate::vk1_0::BlendFactor,
    pub alpha_blend_op: crate::vk1_0::BlendOp,
    pub color_write_mask: crate::vk1_0::ColorComponentFlags,
}
impl Default for PipelineColorBlendAttachmentState {
    fn default() -> Self {
        Self {
            blend_enable: Default::default(),
            src_color_blend_factor: Default::default(),
            dst_color_blend_factor: Default::default(),
            color_blend_op: Default::default(),
            src_alpha_blend_factor: Default::default(),
            dst_alpha_blend_factor: Default::default(),
            alpha_blend_op: Default::default(),
            color_write_mask: Default::default(),
        }
    }
}
impl std::fmt::Debug for PipelineColorBlendAttachmentState {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineColorBlendAttachmentState")
            .field("blend_enable", &(self.blend_enable != 0))
            .field("src_color_blend_factor", &self.src_color_blend_factor)
            .field("dst_color_blend_factor", &self.dst_color_blend_factor)
            .field("color_blend_op", &self.color_blend_op)
            .field("src_alpha_blend_factor", &self.src_alpha_blend_factor)
            .field("dst_alpha_blend_factor", &self.dst_alpha_blend_factor)
            .field("alpha_blend_op", &self.alpha_blend_op)
            .field("color_write_mask", &self.color_write_mask)
            .finish()
    }
}
impl PipelineColorBlendAttachmentState {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineColorBlendAttachmentStateBuilder<'a> {
        PipelineColorBlendAttachmentStateBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineColorBlendAttachmentState.html) · Builder of [`PipelineColorBlendAttachmentState`]"]
#[repr(transparent)]
pub struct PipelineColorBlendAttachmentStateBuilder<'a>(
    PipelineColorBlendAttachmentState,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineColorBlendAttachmentStateBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineColorBlendAttachmentStateBuilder<'a> {
        PipelineColorBlendAttachmentStateBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn blend_enable(mut self, blend_enable: bool) -> Self {
        self.0.blend_enable = blend_enable as _;
        self
    }
    #[inline]
    pub fn src_color_blend_factor(
        mut self,
        src_color_blend_factor: crate::vk1_0::BlendFactor,
    ) -> Self {
        self.0.src_color_blend_factor = src_color_blend_factor as _;
        self
    }
    #[inline]
    pub fn dst_color_blend_factor(
        mut self,
        dst_color_blend_factor: crate::vk1_0::BlendFactor,
    ) -> Self {
        self.0.dst_color_blend_factor = dst_color_blend_factor as _;
        self
    }
    #[inline]
    pub fn color_blend_op(mut self, color_blend_op: crate::vk1_0::BlendOp) -> Self {
        self.0.color_blend_op = color_blend_op as _;
        self
    }
    #[inline]
    pub fn src_alpha_blend_factor(
        mut self,
        src_alpha_blend_factor: crate::vk1_0::BlendFactor,
    ) -> Self {
        self.0.src_alpha_blend_factor = src_alpha_blend_factor as _;
        self
    }
    #[inline]
    pub fn dst_alpha_blend_factor(
        mut self,
        dst_alpha_blend_factor: crate::vk1_0::BlendFactor,
    ) -> Self {
        self.0.dst_alpha_blend_factor = dst_alpha_blend_factor as _;
        self
    }
    #[inline]
    pub fn alpha_blend_op(mut self, alpha_blend_op: crate::vk1_0::BlendOp) -> Self {
        self.0.alpha_blend_op = alpha_blend_op as _;
        self
    }
    #[inline]
    pub fn color_write_mask(mut self, color_write_mask: crate::vk1_0::ColorComponentFlags) -> Self {
        self.0.color_write_mask = color_write_mask as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineColorBlendAttachmentState {
        self.0
    }
}
impl<'a> std::default::Default for PipelineColorBlendAttachmentStateBuilder<'a> {
    fn default() -> PipelineColorBlendAttachmentStateBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineColorBlendAttachmentStateBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineColorBlendAttachmentStateBuilder<'a> {
    type Target = PipelineColorBlendAttachmentState;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineColorBlendAttachmentStateBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineColorBlendStateCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineColorBlendStateCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineColorBlendStateCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineColorBlendStateCreateFlags,
    pub logic_op_enable: crate::vk1_0::Bool32,
    pub logic_op: crate::vk1_0::LogicOp,
    pub attachment_count: u32,
    pub p_attachments: *const crate::vk1_0::PipelineColorBlendAttachmentState,
    pub blend_constants: [std::os::raw::c_float; 4],
}
impl Default for PipelineColorBlendStateCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            logic_op_enable: Default::default(),
            logic_op: Default::default(),
            attachment_count: Default::default(),
            p_attachments: std::ptr::null(),
            blend_constants: unsafe { std::mem::zeroed() },
        }
    }
}
impl std::fmt::Debug for PipelineColorBlendStateCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineColorBlendStateCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("logic_op_enable", &(self.logic_op_enable != 0))
            .field("logic_op", &self.logic_op)
            .field("attachment_count", &self.attachment_count)
            .field("p_attachments", &self.p_attachments)
            .field("blend_constants", &self.blend_constants)
            .finish()
    }
}
impl PipelineColorBlendStateCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineColorBlendStateCreateInfoBuilder<'a> {
        PipelineColorBlendStateCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_blend_operation_advanced :: PipelineColorBlendAdvancedStateCreateInfoEXT > for PipelineColorBlendStateCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_blend_operation_advanced :: PipelineColorBlendAdvancedStateCreateInfoEXTBuilder < '_ >> for PipelineColorBlendStateCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineColorBlendStateCreateInfo.html) · Builder of [`PipelineColorBlendStateCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineColorBlendStateCreateInfoBuilder<'a>(
    PipelineColorBlendStateCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineColorBlendStateCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineColorBlendStateCreateInfoBuilder<'a> {
        PipelineColorBlendStateCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineColorBlendStateCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn logic_op_enable(mut self, logic_op_enable: bool) -> Self {
        self.0.logic_op_enable = logic_op_enable as _;
        self
    }
    #[inline]
    pub fn logic_op(mut self, logic_op: crate::vk1_0::LogicOp) -> Self {
        self.0.logic_op = logic_op as _;
        self
    }
    #[inline]
    pub fn attachments(
        mut self,
        attachments: &'a [crate::vk1_0::PipelineColorBlendAttachmentStateBuilder],
    ) -> Self {
        self.0.p_attachments = attachments.as_ptr() as _;
        self.0.attachment_count = attachments.len() as _;
        self
    }
    #[inline]
    pub fn blend_constants(mut self, blend_constants: [std::os::raw::c_float; 4]) -> Self {
        self.0.blend_constants = blend_constants as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineColorBlendStateCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineColorBlendStateCreateInfoBuilder<'a> {
    fn default() -> PipelineColorBlendStateCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineColorBlendStateCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineColorBlendStateCreateInfoBuilder<'a> {
    type Target = PipelineColorBlendStateCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineColorBlendStateCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineDynamicStateCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineDynamicStateCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineDynamicStateCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineDynamicStateCreateFlags,
    pub dynamic_state_count: u32,
    pub p_dynamic_states: *const crate::vk1_0::DynamicState,
}
impl Default for PipelineDynamicStateCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_DYNAMIC_STATE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            dynamic_state_count: Default::default(),
            p_dynamic_states: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for PipelineDynamicStateCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineDynamicStateCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("dynamic_state_count", &self.dynamic_state_count)
            .field("p_dynamic_states", &self.p_dynamic_states)
            .finish()
    }
}
impl PipelineDynamicStateCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineDynamicStateCreateInfoBuilder<'a> {
        PipelineDynamicStateCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineDynamicStateCreateInfo.html) · Builder of [`PipelineDynamicStateCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineDynamicStateCreateInfoBuilder<'a>(
    PipelineDynamicStateCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineDynamicStateCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineDynamicStateCreateInfoBuilder<'a> {
        PipelineDynamicStateCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineDynamicStateCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn dynamic_states(mut self, dynamic_states: &'a [crate::vk1_0::DynamicState]) -> Self {
        self.0.p_dynamic_states = dynamic_states.as_ptr() as _;
        self.0.dynamic_state_count = dynamic_states.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineDynamicStateCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineDynamicStateCreateInfoBuilder<'a> {
    fn default() -> PipelineDynamicStateCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineDynamicStateCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineDynamicStateCreateInfoBuilder<'a> {
    type Target = PipelineDynamicStateCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineDynamicStateCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkStencilOpState.html) · Structure"]
#[doc(alias = "VkStencilOpState")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct StencilOpState {
    pub fail_op: crate::vk1_0::StencilOp,
    pub pass_op: crate::vk1_0::StencilOp,
    pub depth_fail_op: crate::vk1_0::StencilOp,
    pub compare_op: crate::vk1_0::CompareOp,
    pub compare_mask: u32,
    pub write_mask: u32,
    pub reference: u32,
}
impl Default for StencilOpState {
    fn default() -> Self {
        Self {
            fail_op: Default::default(),
            pass_op: Default::default(),
            depth_fail_op: Default::default(),
            compare_op: Default::default(),
            compare_mask: Default::default(),
            write_mask: Default::default(),
            reference: Default::default(),
        }
    }
}
impl std::fmt::Debug for StencilOpState {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("StencilOpState")
            .field("fail_op", &self.fail_op)
            .field("pass_op", &self.pass_op)
            .field("depth_fail_op", &self.depth_fail_op)
            .field("compare_op", &self.compare_op)
            .field("compare_mask", &self.compare_mask)
            .field("write_mask", &self.write_mask)
            .field("reference", &self.reference)
            .finish()
    }
}
impl StencilOpState {
    #[inline]
    pub fn into_builder<'a>(self) -> StencilOpStateBuilder<'a> {
        StencilOpStateBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkStencilOpState.html) · Builder of [`StencilOpState`]"]
#[repr(transparent)]
pub struct StencilOpStateBuilder<'a>(StencilOpState, std::marker::PhantomData<&'a ()>);
impl<'a> StencilOpStateBuilder<'a> {
    #[inline]
    pub fn new() -> StencilOpStateBuilder<'a> {
        StencilOpStateBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn fail_op(mut self, fail_op: crate::vk1_0::StencilOp) -> Self {
        self.0.fail_op = fail_op as _;
        self
    }
    #[inline]
    pub fn pass_op(mut self, pass_op: crate::vk1_0::StencilOp) -> Self {
        self.0.pass_op = pass_op as _;
        self
    }
    #[inline]
    pub fn depth_fail_op(mut self, depth_fail_op: crate::vk1_0::StencilOp) -> Self {
        self.0.depth_fail_op = depth_fail_op as _;
        self
    }
    #[inline]
    pub fn compare_op(mut self, compare_op: crate::vk1_0::CompareOp) -> Self {
        self.0.compare_op = compare_op as _;
        self
    }
    #[inline]
    pub fn compare_mask(mut self, compare_mask: u32) -> Self {
        self.0.compare_mask = compare_mask as _;
        self
    }
    #[inline]
    pub fn write_mask(mut self, write_mask: u32) -> Self {
        self.0.write_mask = write_mask as _;
        self
    }
    #[inline]
    pub fn reference(mut self, reference: u32) -> Self {
        self.0.reference = reference as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> StencilOpState {
        self.0
    }
}
impl<'a> std::default::Default for StencilOpStateBuilder<'a> {
    fn default() -> StencilOpStateBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for StencilOpStateBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for StencilOpStateBuilder<'a> {
    type Target = StencilOpState;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for StencilOpStateBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineDepthStencilStateCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineDepthStencilStateCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineDepthStencilStateCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineDepthStencilStateCreateFlags,
    pub depth_test_enable: crate::vk1_0::Bool32,
    pub depth_write_enable: crate::vk1_0::Bool32,
    pub depth_compare_op: crate::vk1_0::CompareOp,
    pub depth_bounds_test_enable: crate::vk1_0::Bool32,
    pub stencil_test_enable: crate::vk1_0::Bool32,
    pub front: crate::vk1_0::StencilOpState,
    pub back: crate::vk1_0::StencilOpState,
    pub min_depth_bounds: std::os::raw::c_float,
    pub max_depth_bounds: std::os::raw::c_float,
}
impl Default for PipelineDepthStencilStateCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            depth_test_enable: Default::default(),
            depth_write_enable: Default::default(),
            depth_compare_op: Default::default(),
            depth_bounds_test_enable: Default::default(),
            stencil_test_enable: Default::default(),
            front: Default::default(),
            back: Default::default(),
            min_depth_bounds: Default::default(),
            max_depth_bounds: Default::default(),
        }
    }
}
impl std::fmt::Debug for PipelineDepthStencilStateCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineDepthStencilStateCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("depth_test_enable", &(self.depth_test_enable != 0))
            .field("depth_write_enable", &(self.depth_write_enable != 0))
            .field("depth_compare_op", &self.depth_compare_op)
            .field(
                "depth_bounds_test_enable",
                &(self.depth_bounds_test_enable != 0),
            )
            .field("stencil_test_enable", &(self.stencil_test_enable != 0))
            .field("front", &self.front)
            .field("back", &self.back)
            .field("min_depth_bounds", &self.min_depth_bounds)
            .field("max_depth_bounds", &self.max_depth_bounds)
            .finish()
    }
}
impl PipelineDepthStencilStateCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineDepthStencilStateCreateInfoBuilder<'a> {
        PipelineDepthStencilStateCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineDepthStencilStateCreateInfo.html) · Builder of [`PipelineDepthStencilStateCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineDepthStencilStateCreateInfoBuilder<'a>(
    PipelineDepthStencilStateCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineDepthStencilStateCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineDepthStencilStateCreateInfoBuilder<'a> {
        PipelineDepthStencilStateCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineDepthStencilStateCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn depth_test_enable(mut self, depth_test_enable: bool) -> Self {
        self.0.depth_test_enable = depth_test_enable as _;
        self
    }
    #[inline]
    pub fn depth_write_enable(mut self, depth_write_enable: bool) -> Self {
        self.0.depth_write_enable = depth_write_enable as _;
        self
    }
    #[inline]
    pub fn depth_compare_op(mut self, depth_compare_op: crate::vk1_0::CompareOp) -> Self {
        self.0.depth_compare_op = depth_compare_op as _;
        self
    }
    #[inline]
    pub fn depth_bounds_test_enable(mut self, depth_bounds_test_enable: bool) -> Self {
        self.0.depth_bounds_test_enable = depth_bounds_test_enable as _;
        self
    }
    #[inline]
    pub fn stencil_test_enable(mut self, stencil_test_enable: bool) -> Self {
        self.0.stencil_test_enable = stencil_test_enable as _;
        self
    }
    #[inline]
    pub fn front(mut self, front: crate::vk1_0::StencilOpState) -> Self {
        self.0.front = front as _;
        self
    }
    #[inline]
    pub fn back(mut self, back: crate::vk1_0::StencilOpState) -> Self {
        self.0.back = back as _;
        self
    }
    #[inline]
    pub fn min_depth_bounds(mut self, min_depth_bounds: std::os::raw::c_float) -> Self {
        self.0.min_depth_bounds = min_depth_bounds as _;
        self
    }
    #[inline]
    pub fn max_depth_bounds(mut self, max_depth_bounds: std::os::raw::c_float) -> Self {
        self.0.max_depth_bounds = max_depth_bounds as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineDepthStencilStateCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineDepthStencilStateCreateInfoBuilder<'a> {
    fn default() -> PipelineDepthStencilStateCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineDepthStencilStateCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineDepthStencilStateCreateInfoBuilder<'a> {
    type Target = PipelineDepthStencilStateCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineDepthStencilStateCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkGraphicsPipelineCreateInfo.html) · Structure"]
#[doc(alias = "VkGraphicsPipelineCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct GraphicsPipelineCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineCreateFlags,
    pub stage_count: u32,
    pub p_stages: *const crate::vk1_0::PipelineShaderStageCreateInfo,
    pub p_vertex_input_state: *const crate::vk1_0::PipelineVertexInputStateCreateInfo,
    pub p_input_assembly_state: *const crate::vk1_0::PipelineInputAssemblyStateCreateInfo,
    pub p_tessellation_state: *const crate::vk1_0::PipelineTessellationStateCreateInfo,
    pub p_viewport_state: *const crate::vk1_0::PipelineViewportStateCreateInfo,
    pub p_rasterization_state: *const crate::vk1_0::PipelineRasterizationStateCreateInfo,
    pub p_multisample_state: *const crate::vk1_0::PipelineMultisampleStateCreateInfo,
    pub p_depth_stencil_state: *const crate::vk1_0::PipelineDepthStencilStateCreateInfo,
    pub p_color_blend_state: *const crate::vk1_0::PipelineColorBlendStateCreateInfo,
    pub p_dynamic_state: *const crate::vk1_0::PipelineDynamicStateCreateInfo,
    pub layout: crate::vk1_0::PipelineLayout,
    pub render_pass: crate::vk1_0::RenderPass,
    pub subpass: u32,
    pub base_pipeline_handle: crate::vk1_0::Pipeline,
    pub base_pipeline_index: i32,
}
impl Default for GraphicsPipelineCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::GRAPHICS_PIPELINE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            stage_count: Default::default(),
            p_stages: std::ptr::null(),
            p_vertex_input_state: std::ptr::null(),
            p_input_assembly_state: std::ptr::null(),
            p_tessellation_state: std::ptr::null(),
            p_viewport_state: std::ptr::null(),
            p_rasterization_state: std::ptr::null(),
            p_multisample_state: std::ptr::null(),
            p_depth_stencil_state: std::ptr::null(),
            p_color_blend_state: std::ptr::null(),
            p_dynamic_state: std::ptr::null(),
            layout: Default::default(),
            render_pass: Default::default(),
            subpass: Default::default(),
            base_pipeline_handle: Default::default(),
            base_pipeline_index: Default::default(),
        }
    }
}
impl std::fmt::Debug for GraphicsPipelineCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("GraphicsPipelineCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("stage_count", &self.stage_count)
            .field("p_stages", &self.p_stages)
            .field("p_vertex_input_state", &self.p_vertex_input_state)
            .field("p_input_assembly_state", &self.p_input_assembly_state)
            .field("p_tessellation_state", &self.p_tessellation_state)
            .field("p_viewport_state", &self.p_viewport_state)
            .field("p_rasterization_state", &self.p_rasterization_state)
            .field("p_multisample_state", &self.p_multisample_state)
            .field("p_depth_stencil_state", &self.p_depth_stencil_state)
            .field("p_color_blend_state", &self.p_color_blend_state)
            .field("p_dynamic_state", &self.p_dynamic_state)
            .field("layout", &self.layout)
            .field("render_pass", &self.render_pass)
            .field("subpass", &self.subpass)
            .field("base_pipeline_handle", &self.base_pipeline_handle)
            .field("base_pipeline_index", &self.base_pipeline_index)
            .finish()
    }
}
impl GraphicsPipelineCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> GraphicsPipelineCreateInfoBuilder<'a> {
        GraphicsPipelineCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_device_generated_commands::GraphicsPipelineShaderGroupsCreateInfoNV,
    > for GraphicsPipelineCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_device_generated_commands :: GraphicsPipelineShaderGroupsCreateInfoNVBuilder < '_ >> for GraphicsPipelineCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_discard_rectangles::PipelineDiscardRectangleStateCreateInfoEXT,
    > for GraphicsPipelineCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_discard_rectangles :: PipelineDiscardRectangleStateCreateInfoEXTBuilder < '_ >> for GraphicsPipelineCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_representative_fragment_test :: PipelineRepresentativeFragmentTestStateCreateInfoNV > for GraphicsPipelineCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_representative_fragment_test :: PipelineRepresentativeFragmentTestStateCreateInfoNVBuilder < '_ >> for GraphicsPipelineCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_pipeline_creation_feedback::PipelineCreationFeedbackCreateInfoEXT,
    > for GraphicsPipelineCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_pipeline_creation_feedback :: PipelineCreationFeedbackCreateInfoEXTBuilder < '_ >> for GraphicsPipelineCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::amd_pipeline_compiler_control::PipelineCompilerControlCreateInfoAMD,
    > for GraphicsPipelineCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: amd_pipeline_compiler_control :: PipelineCompilerControlCreateInfoAMDBuilder < '_ >> for GraphicsPipelineCreateInfoBuilder < 'a > { }
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_fragment_shading_rate::PipelineFragmentShadingRateStateCreateInfoKHR,
    > for GraphicsPipelineCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: khr_fragment_shading_rate :: PipelineFragmentShadingRateStateCreateInfoKHRBuilder < '_ >> for GraphicsPipelineCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_fragment_shading_rate_enums :: PipelineFragmentShadingRateEnumStateCreateInfoNV > for GraphicsPipelineCreateInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: nv_fragment_shading_rate_enums :: PipelineFragmentShadingRateEnumStateCreateInfoNVBuilder < '_ >> for GraphicsPipelineCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkGraphicsPipelineCreateInfo.html) · Builder of [`GraphicsPipelineCreateInfo`]"]
#[repr(transparent)]
pub struct GraphicsPipelineCreateInfoBuilder<'a>(
    GraphicsPipelineCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> GraphicsPipelineCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> GraphicsPipelineCreateInfoBuilder<'a> {
        GraphicsPipelineCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn stages(
        mut self,
        stages: &'a [crate::vk1_0::PipelineShaderStageCreateInfoBuilder],
    ) -> Self {
        self.0.p_stages = stages.as_ptr() as _;
        self.0.stage_count = stages.len() as _;
        self
    }
    #[inline]
    pub fn vertex_input_state(
        mut self,
        vertex_input_state: &'a crate::vk1_0::PipelineVertexInputStateCreateInfo,
    ) -> Self {
        self.0.p_vertex_input_state = vertex_input_state as _;
        self
    }
    #[inline]
    pub fn input_assembly_state(
        mut self,
        input_assembly_state: &'a crate::vk1_0::PipelineInputAssemblyStateCreateInfo,
    ) -> Self {
        self.0.p_input_assembly_state = input_assembly_state as _;
        self
    }
    #[inline]
    pub fn tessellation_state(
        mut self,
        tessellation_state: &'a crate::vk1_0::PipelineTessellationStateCreateInfo,
    ) -> Self {
        self.0.p_tessellation_state = tessellation_state as _;
        self
    }
    #[inline]
    pub fn viewport_state(
        mut self,
        viewport_state: &'a crate::vk1_0::PipelineViewportStateCreateInfo,
    ) -> Self {
        self.0.p_viewport_state = viewport_state as _;
        self
    }
    #[inline]
    pub fn rasterization_state(
        mut self,
        rasterization_state: &'a crate::vk1_0::PipelineRasterizationStateCreateInfo,
    ) -> Self {
        self.0.p_rasterization_state = rasterization_state as _;
        self
    }
    #[inline]
    pub fn multisample_state(
        mut self,
        multisample_state: &'a crate::vk1_0::PipelineMultisampleStateCreateInfo,
    ) -> Self {
        self.0.p_multisample_state = multisample_state as _;
        self
    }
    #[inline]
    pub fn depth_stencil_state(
        mut self,
        depth_stencil_state: &'a crate::vk1_0::PipelineDepthStencilStateCreateInfo,
    ) -> Self {
        self.0.p_depth_stencil_state = depth_stencil_state as _;
        self
    }
    #[inline]
    pub fn color_blend_state(
        mut self,
        color_blend_state: &'a crate::vk1_0::PipelineColorBlendStateCreateInfo,
    ) -> Self {
        self.0.p_color_blend_state = color_blend_state as _;
        self
    }
    #[inline]
    pub fn dynamic_state(
        mut self,
        dynamic_state: &'a crate::vk1_0::PipelineDynamicStateCreateInfo,
    ) -> Self {
        self.0.p_dynamic_state = dynamic_state as _;
        self
    }
    #[inline]
    pub fn layout(mut self, layout: crate::vk1_0::PipelineLayout) -> Self {
        self.0.layout = layout as _;
        self
    }
    #[inline]
    pub fn render_pass(mut self, render_pass: crate::vk1_0::RenderPass) -> Self {
        self.0.render_pass = render_pass as _;
        self
    }
    #[inline]
    pub fn subpass(mut self, subpass: u32) -> Self {
        self.0.subpass = subpass as _;
        self
    }
    #[inline]
    pub fn base_pipeline_handle(mut self, base_pipeline_handle: crate::vk1_0::Pipeline) -> Self {
        self.0.base_pipeline_handle = base_pipeline_handle as _;
        self
    }
    #[inline]
    pub fn base_pipeline_index(mut self, base_pipeline_index: i32) -> Self {
        self.0.base_pipeline_index = base_pipeline_index as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> GraphicsPipelineCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for GraphicsPipelineCreateInfoBuilder<'a> {
    fn default() -> GraphicsPipelineCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for GraphicsPipelineCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for GraphicsPipelineCreateInfoBuilder<'a> {
    type Target = GraphicsPipelineCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for GraphicsPipelineCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineCacheCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineCacheCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineCacheCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineCacheCreateFlags,
    pub initial_data_size: usize,
    pub p_initial_data: *const std::ffi::c_void,
}
impl Default for PipelineCacheCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_CACHE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            initial_data_size: Default::default(),
            p_initial_data: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for PipelineCacheCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineCacheCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("initial_data_size", &self.initial_data_size)
            .field("p_initial_data", &self.p_initial_data)
            .finish()
    }
}
impl PipelineCacheCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineCacheCreateInfoBuilder<'a> {
        PipelineCacheCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineCacheCreateInfo.html) · Builder of [`PipelineCacheCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineCacheCreateInfoBuilder<'a>(
    PipelineCacheCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineCacheCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineCacheCreateInfoBuilder<'a> {
        PipelineCacheCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineCacheCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn initial_data_size(mut self, initial_data_size: usize) -> Self {
        self.0.initial_data_size = initial_data_size;
        self
    }
    #[inline]
    pub fn initial_data(mut self, initial_data: *const std::ffi::c_void) -> Self {
        self.0.p_initial_data = initial_data;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineCacheCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineCacheCreateInfoBuilder<'a> {
    fn default() -> PipelineCacheCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineCacheCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineCacheCreateInfoBuilder<'a> {
    type Target = PipelineCacheCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineCacheCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPushConstantRange.html) · Structure"]
#[doc(alias = "VkPushConstantRange")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PushConstantRange {
    pub stage_flags: crate::vk1_0::ShaderStageFlags,
    pub offset: u32,
    pub size: u32,
}
impl Default for PushConstantRange {
    fn default() -> Self {
        Self {
            stage_flags: Default::default(),
            offset: Default::default(),
            size: Default::default(),
        }
    }
}
impl std::fmt::Debug for PushConstantRange {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PushConstantRange")
            .field("stage_flags", &self.stage_flags)
            .field("offset", &self.offset)
            .field("size", &self.size)
            .finish()
    }
}
impl PushConstantRange {
    #[inline]
    pub fn into_builder<'a>(self) -> PushConstantRangeBuilder<'a> {
        PushConstantRangeBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPushConstantRange.html) · Builder of [`PushConstantRange`]"]
#[repr(transparent)]
pub struct PushConstantRangeBuilder<'a>(PushConstantRange, std::marker::PhantomData<&'a ()>);
impl<'a> PushConstantRangeBuilder<'a> {
    #[inline]
    pub fn new() -> PushConstantRangeBuilder<'a> {
        PushConstantRangeBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn stage_flags(mut self, stage_flags: crate::vk1_0::ShaderStageFlags) -> Self {
        self.0.stage_flags = stage_flags as _;
        self
    }
    #[inline]
    pub fn offset(mut self, offset: u32) -> Self {
        self.0.offset = offset as _;
        self
    }
    #[inline]
    pub fn size(mut self, size: u32) -> Self {
        self.0.size = size as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PushConstantRange {
        self.0
    }
}
impl<'a> std::default::Default for PushConstantRangeBuilder<'a> {
    fn default() -> PushConstantRangeBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PushConstantRangeBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PushConstantRangeBuilder<'a> {
    type Target = PushConstantRange;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PushConstantRangeBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineLayoutCreateInfo.html) · Structure"]
#[doc(alias = "VkPipelineLayoutCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PipelineLayoutCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::PipelineLayoutCreateFlags,
    pub set_layout_count: u32,
    pub p_set_layouts: *const crate::vk1_0::DescriptorSetLayout,
    pub push_constant_range_count: u32,
    pub p_push_constant_ranges: *const crate::vk1_0::PushConstantRange,
}
impl Default for PipelineLayoutCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::PIPELINE_LAYOUT_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            set_layout_count: Default::default(),
            p_set_layouts: std::ptr::null(),
            push_constant_range_count: Default::default(),
            p_push_constant_ranges: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for PipelineLayoutCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PipelineLayoutCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("set_layout_count", &self.set_layout_count)
            .field("p_set_layouts", &self.p_set_layouts)
            .field("push_constant_range_count", &self.push_constant_range_count)
            .field("p_push_constant_ranges", &self.p_push_constant_ranges)
            .finish()
    }
}
impl PipelineLayoutCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> PipelineLayoutCreateInfoBuilder<'a> {
        PipelineLayoutCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPipelineLayoutCreateInfo.html) · Builder of [`PipelineLayoutCreateInfo`]"]
#[repr(transparent)]
pub struct PipelineLayoutCreateInfoBuilder<'a>(
    PipelineLayoutCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PipelineLayoutCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> PipelineLayoutCreateInfoBuilder<'a> {
        PipelineLayoutCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::PipelineLayoutCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn set_layouts(mut self, set_layouts: &'a [crate::vk1_0::DescriptorSetLayout]) -> Self {
        self.0.p_set_layouts = set_layouts.as_ptr() as _;
        self.0.set_layout_count = set_layouts.len() as _;
        self
    }
    #[inline]
    pub fn push_constant_ranges(
        mut self,
        push_constant_ranges: &'a [crate::vk1_0::PushConstantRangeBuilder],
    ) -> Self {
        self.0.p_push_constant_ranges = push_constant_ranges.as_ptr() as _;
        self.0.push_constant_range_count = push_constant_ranges.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PipelineLayoutCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for PipelineLayoutCreateInfoBuilder<'a> {
    fn default() -> PipelineLayoutCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PipelineLayoutCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PipelineLayoutCreateInfoBuilder<'a> {
    type Target = PipelineLayoutCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PipelineLayoutCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSamplerCreateInfo.html) · Structure"]
#[doc(alias = "VkSamplerCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SamplerCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::SamplerCreateFlags,
    pub mag_filter: crate::vk1_0::Filter,
    pub min_filter: crate::vk1_0::Filter,
    pub mipmap_mode: crate::vk1_0::SamplerMipmapMode,
    pub address_mode_u: crate::vk1_0::SamplerAddressMode,
    pub address_mode_v: crate::vk1_0::SamplerAddressMode,
    pub address_mode_w: crate::vk1_0::SamplerAddressMode,
    pub mip_lod_bias: std::os::raw::c_float,
    pub anisotropy_enable: crate::vk1_0::Bool32,
    pub max_anisotropy: std::os::raw::c_float,
    pub compare_enable: crate::vk1_0::Bool32,
    pub compare_op: crate::vk1_0::CompareOp,
    pub min_lod: std::os::raw::c_float,
    pub max_lod: std::os::raw::c_float,
    pub border_color: crate::vk1_0::BorderColor,
    pub unnormalized_coordinates: crate::vk1_0::Bool32,
}
impl Default for SamplerCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::SAMPLER_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            mag_filter: Default::default(),
            min_filter: Default::default(),
            mipmap_mode: Default::default(),
            address_mode_u: Default::default(),
            address_mode_v: Default::default(),
            address_mode_w: Default::default(),
            mip_lod_bias: Default::default(),
            anisotropy_enable: Default::default(),
            max_anisotropy: Default::default(),
            compare_enable: Default::default(),
            compare_op: Default::default(),
            min_lod: Default::default(),
            max_lod: Default::default(),
            border_color: Default::default(),
            unnormalized_coordinates: Default::default(),
        }
    }
}
impl std::fmt::Debug for SamplerCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SamplerCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("mag_filter", &self.mag_filter)
            .field("min_filter", &self.min_filter)
            .field("mipmap_mode", &self.mipmap_mode)
            .field("address_mode_u", &self.address_mode_u)
            .field("address_mode_v", &self.address_mode_v)
            .field("address_mode_w", &self.address_mode_w)
            .field("mip_lod_bias", &self.mip_lod_bias)
            .field("anisotropy_enable", &(self.anisotropy_enable != 0))
            .field("max_anisotropy", &self.max_anisotropy)
            .field("compare_enable", &(self.compare_enable != 0))
            .field("compare_op", &self.compare_op)
            .field("min_lod", &self.min_lod)
            .field("max_lod", &self.max_lod)
            .field("border_color", &self.border_color)
            .field(
                "unnormalized_coordinates",
                &(self.unnormalized_coordinates != 0),
            )
            .finish()
    }
}
impl SamplerCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> SamplerCreateInfoBuilder<'a> {
        SamplerCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::SamplerYcbcrConversionInfo>
    for SamplerCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::SamplerYcbcrConversionInfoBuilder<'_>>
    for SamplerCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::SamplerReductionModeCreateInfo>
    for SamplerCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::SamplerReductionModeCreateInfoBuilder<'_>>
    for SamplerCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_custom_border_color::SamplerCustomBorderColorCreateInfoEXT,
    > for SamplerCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_custom_border_color::SamplerCustomBorderColorCreateInfoEXTBuilder<
            '_,
        >,
    > for SamplerCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSamplerCreateInfo.html) · Builder of [`SamplerCreateInfo`]"]
#[repr(transparent)]
pub struct SamplerCreateInfoBuilder<'a>(SamplerCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> SamplerCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> SamplerCreateInfoBuilder<'a> {
        SamplerCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::SamplerCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn mag_filter(mut self, mag_filter: crate::vk1_0::Filter) -> Self {
        self.0.mag_filter = mag_filter as _;
        self
    }
    #[inline]
    pub fn min_filter(mut self, min_filter: crate::vk1_0::Filter) -> Self {
        self.0.min_filter = min_filter as _;
        self
    }
    #[inline]
    pub fn mipmap_mode(mut self, mipmap_mode: crate::vk1_0::SamplerMipmapMode) -> Self {
        self.0.mipmap_mode = mipmap_mode as _;
        self
    }
    #[inline]
    pub fn address_mode_u(mut self, address_mode_u: crate::vk1_0::SamplerAddressMode) -> Self {
        self.0.address_mode_u = address_mode_u as _;
        self
    }
    #[inline]
    pub fn address_mode_v(mut self, address_mode_v: crate::vk1_0::SamplerAddressMode) -> Self {
        self.0.address_mode_v = address_mode_v as _;
        self
    }
    #[inline]
    pub fn address_mode_w(mut self, address_mode_w: crate::vk1_0::SamplerAddressMode) -> Self {
        self.0.address_mode_w = address_mode_w as _;
        self
    }
    #[inline]
    pub fn mip_lod_bias(mut self, mip_lod_bias: std::os::raw::c_float) -> Self {
        self.0.mip_lod_bias = mip_lod_bias as _;
        self
    }
    #[inline]
    pub fn anisotropy_enable(mut self, anisotropy_enable: bool) -> Self {
        self.0.anisotropy_enable = anisotropy_enable as _;
        self
    }
    #[inline]
    pub fn max_anisotropy(mut self, max_anisotropy: std::os::raw::c_float) -> Self {
        self.0.max_anisotropy = max_anisotropy as _;
        self
    }
    #[inline]
    pub fn compare_enable(mut self, compare_enable: bool) -> Self {
        self.0.compare_enable = compare_enable as _;
        self
    }
    #[inline]
    pub fn compare_op(mut self, compare_op: crate::vk1_0::CompareOp) -> Self {
        self.0.compare_op = compare_op as _;
        self
    }
    #[inline]
    pub fn min_lod(mut self, min_lod: std::os::raw::c_float) -> Self {
        self.0.min_lod = min_lod as _;
        self
    }
    #[inline]
    pub fn max_lod(mut self, max_lod: std::os::raw::c_float) -> Self {
        self.0.max_lod = max_lod as _;
        self
    }
    #[inline]
    pub fn border_color(mut self, border_color: crate::vk1_0::BorderColor) -> Self {
        self.0.border_color = border_color as _;
        self
    }
    #[inline]
    pub fn unnormalized_coordinates(mut self, unnormalized_coordinates: bool) -> Self {
        self.0.unnormalized_coordinates = unnormalized_coordinates as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SamplerCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for SamplerCreateInfoBuilder<'a> {
    fn default() -> SamplerCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SamplerCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SamplerCreateInfoBuilder<'a> {
    type Target = SamplerCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SamplerCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandPoolCreateInfo.html) · Structure"]
#[doc(alias = "VkCommandPoolCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct CommandPoolCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::CommandPoolCreateFlags,
    pub queue_family_index: u32,
}
impl Default for CommandPoolCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::COMMAND_POOL_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            queue_family_index: Default::default(),
        }
    }
}
impl std::fmt::Debug for CommandPoolCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("CommandPoolCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("queue_family_index", &self.queue_family_index)
            .finish()
    }
}
impl CommandPoolCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> CommandPoolCreateInfoBuilder<'a> {
        CommandPoolCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandPoolCreateInfo.html) · Builder of [`CommandPoolCreateInfo`]"]
#[repr(transparent)]
pub struct CommandPoolCreateInfoBuilder<'a>(
    CommandPoolCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> CommandPoolCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> CommandPoolCreateInfoBuilder<'a> {
        CommandPoolCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::CommandPoolCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn queue_family_index(mut self, queue_family_index: u32) -> Self {
        self.0.queue_family_index = queue_family_index as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> CommandPoolCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for CommandPoolCreateInfoBuilder<'a> {
    fn default() -> CommandPoolCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for CommandPoolCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for CommandPoolCreateInfoBuilder<'a> {
    type Target = CommandPoolCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for CommandPoolCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferAllocateInfo.html) · Structure"]
#[doc(alias = "VkCommandBufferAllocateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct CommandBufferAllocateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub command_pool: crate::vk1_0::CommandPool,
    pub level: crate::vk1_0::CommandBufferLevel,
    pub command_buffer_count: u32,
}
impl Default for CommandBufferAllocateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::COMMAND_BUFFER_ALLOCATE_INFO,
            p_next: std::ptr::null(),
            command_pool: Default::default(),
            level: Default::default(),
            command_buffer_count: Default::default(),
        }
    }
}
impl std::fmt::Debug for CommandBufferAllocateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("CommandBufferAllocateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("command_pool", &self.command_pool)
            .field("level", &self.level)
            .field("command_buffer_count", &self.command_buffer_count)
            .finish()
    }
}
impl CommandBufferAllocateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> CommandBufferAllocateInfoBuilder<'a> {
        CommandBufferAllocateInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferAllocateInfo.html) · Builder of [`CommandBufferAllocateInfo`]"]
#[repr(transparent)]
pub struct CommandBufferAllocateInfoBuilder<'a>(
    CommandBufferAllocateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> CommandBufferAllocateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> CommandBufferAllocateInfoBuilder<'a> {
        CommandBufferAllocateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn command_pool(mut self, command_pool: crate::vk1_0::CommandPool) -> Self {
        self.0.command_pool = command_pool as _;
        self
    }
    #[inline]
    pub fn level(mut self, level: crate::vk1_0::CommandBufferLevel) -> Self {
        self.0.level = level as _;
        self
    }
    #[inline]
    pub fn command_buffer_count(mut self, command_buffer_count: u32) -> Self {
        self.0.command_buffer_count = command_buffer_count as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> CommandBufferAllocateInfo {
        self.0
    }
}
impl<'a> std::default::Default for CommandBufferAllocateInfoBuilder<'a> {
    fn default() -> CommandBufferAllocateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for CommandBufferAllocateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for CommandBufferAllocateInfoBuilder<'a> {
    type Target = CommandBufferAllocateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for CommandBufferAllocateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferInheritanceInfo.html) · Structure"]
#[doc(alias = "VkCommandBufferInheritanceInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct CommandBufferInheritanceInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub render_pass: crate::vk1_0::RenderPass,
    pub subpass: u32,
    pub framebuffer: crate::vk1_0::Framebuffer,
    pub occlusion_query_enable: crate::vk1_0::Bool32,
    pub query_flags: crate::vk1_0::QueryControlFlags,
    pub pipeline_statistics: crate::vk1_0::QueryPipelineStatisticFlags,
}
impl Default for CommandBufferInheritanceInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::COMMAND_BUFFER_INHERITANCE_INFO,
            p_next: std::ptr::null(),
            render_pass: Default::default(),
            subpass: Default::default(),
            framebuffer: Default::default(),
            occlusion_query_enable: Default::default(),
            query_flags: Default::default(),
            pipeline_statistics: Default::default(),
        }
    }
}
impl std::fmt::Debug for CommandBufferInheritanceInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("CommandBufferInheritanceInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("render_pass", &self.render_pass)
            .field("subpass", &self.subpass)
            .field("framebuffer", &self.framebuffer)
            .field(
                "occlusion_query_enable",
                &(self.occlusion_query_enable != 0),
            )
            .field("query_flags", &self.query_flags)
            .field("pipeline_statistics", &self.pipeline_statistics)
            .finish()
    }
}
impl CommandBufferInheritanceInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> CommandBufferInheritanceInfoBuilder<'a> {
        CommandBufferInheritanceInfoBuilder(self, std::marker::PhantomData)
    }
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_conditional_rendering :: CommandBufferInheritanceConditionalRenderingInfoEXT > for CommandBufferInheritanceInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_conditional_rendering :: CommandBufferInheritanceConditionalRenderingInfoEXTBuilder < '_ >> for CommandBufferInheritanceInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: qcom_render_pass_transform :: CommandBufferInheritanceRenderPassTransformInfoQCOM > for CommandBufferInheritanceInfoBuilder < 'a > { }
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: qcom_render_pass_transform :: CommandBufferInheritanceRenderPassTransformInfoQCOMBuilder < '_ >> for CommandBufferInheritanceInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferInheritanceInfo.html) · Builder of [`CommandBufferInheritanceInfo`]"]
#[repr(transparent)]
pub struct CommandBufferInheritanceInfoBuilder<'a>(
    CommandBufferInheritanceInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> CommandBufferInheritanceInfoBuilder<'a> {
    #[inline]
    pub fn new() -> CommandBufferInheritanceInfoBuilder<'a> {
        CommandBufferInheritanceInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn render_pass(mut self, render_pass: crate::vk1_0::RenderPass) -> Self {
        self.0.render_pass = render_pass as _;
        self
    }
    #[inline]
    pub fn subpass(mut self, subpass: u32) -> Self {
        self.0.subpass = subpass as _;
        self
    }
    #[inline]
    pub fn framebuffer(mut self, framebuffer: crate::vk1_0::Framebuffer) -> Self {
        self.0.framebuffer = framebuffer as _;
        self
    }
    #[inline]
    pub fn occlusion_query_enable(mut self, occlusion_query_enable: bool) -> Self {
        self.0.occlusion_query_enable = occlusion_query_enable as _;
        self
    }
    #[inline]
    pub fn query_flags(mut self, query_flags: crate::vk1_0::QueryControlFlags) -> Self {
        self.0.query_flags = query_flags as _;
        self
    }
    #[inline]
    pub fn pipeline_statistics(
        mut self,
        pipeline_statistics: crate::vk1_0::QueryPipelineStatisticFlags,
    ) -> Self {
        self.0.pipeline_statistics = pipeline_statistics as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> CommandBufferInheritanceInfo {
        self.0
    }
}
impl<'a> std::default::Default for CommandBufferInheritanceInfoBuilder<'a> {
    fn default() -> CommandBufferInheritanceInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for CommandBufferInheritanceInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for CommandBufferInheritanceInfoBuilder<'a> {
    type Target = CommandBufferInheritanceInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for CommandBufferInheritanceInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferBeginInfo.html) · Structure"]
#[doc(alias = "VkCommandBufferBeginInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct CommandBufferBeginInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::CommandBufferUsageFlags,
    pub p_inheritance_info: *const crate::vk1_0::CommandBufferInheritanceInfo,
}
impl Default for CommandBufferBeginInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::COMMAND_BUFFER_BEGIN_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            p_inheritance_info: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for CommandBufferBeginInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("CommandBufferBeginInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("p_inheritance_info", &self.p_inheritance_info)
            .finish()
    }
}
impl CommandBufferBeginInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> CommandBufferBeginInfoBuilder<'a> {
        CommandBufferBeginInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupCommandBufferBeginInfo>
    for CommandBufferBeginInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupCommandBufferBeginInfoBuilder<'_>>
    for CommandBufferBeginInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkCommandBufferBeginInfo.html) · Builder of [`CommandBufferBeginInfo`]"]
#[repr(transparent)]
pub struct CommandBufferBeginInfoBuilder<'a>(
    CommandBufferBeginInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> CommandBufferBeginInfoBuilder<'a> {
    #[inline]
    pub fn new() -> CommandBufferBeginInfoBuilder<'a> {
        CommandBufferBeginInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::CommandBufferUsageFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn inheritance_info(
        mut self,
        inheritance_info: &'a crate::vk1_0::CommandBufferInheritanceInfo,
    ) -> Self {
        self.0.p_inheritance_info = inheritance_info as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> CommandBufferBeginInfo {
        self.0
    }
}
impl<'a> std::default::Default for CommandBufferBeginInfoBuilder<'a> {
    fn default() -> CommandBufferBeginInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for CommandBufferBeginInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for CommandBufferBeginInfoBuilder<'a> {
    type Target = CommandBufferBeginInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for CommandBufferBeginInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkRenderPassBeginInfo.html) · Structure"]
#[doc(alias = "VkRenderPassBeginInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct RenderPassBeginInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub render_pass: crate::vk1_0::RenderPass,
    pub framebuffer: crate::vk1_0::Framebuffer,
    pub render_area: crate::vk1_0::Rect2D,
    pub clear_value_count: u32,
    pub p_clear_values: *const crate::vk1_0::ClearValue,
}
impl Default for RenderPassBeginInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::RENDER_PASS_BEGIN_INFO,
            p_next: std::ptr::null(),
            render_pass: Default::default(),
            framebuffer: Default::default(),
            render_area: Default::default(),
            clear_value_count: Default::default(),
            p_clear_values: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for RenderPassBeginInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("RenderPassBeginInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("render_pass", &self.render_pass)
            .field("framebuffer", &self.framebuffer)
            .field("render_area", &self.render_area)
            .field("clear_value_count", &self.clear_value_count)
            .field("p_clear_values", &self.p_clear_values)
            .finish()
    }
}
impl RenderPassBeginInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> RenderPassBeginInfoBuilder<'a> {
        RenderPassBeginInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupRenderPassBeginInfo>
    for RenderPassBeginInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupRenderPassBeginInfoBuilder<'_>>
    for RenderPassBeginInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_sample_locations::RenderPassSampleLocationsBeginInfoEXT,
    > for RenderPassBeginInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_sample_locations::RenderPassSampleLocationsBeginInfoEXTBuilder<'_>,
    > for RenderPassBeginInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::RenderPassAttachmentBeginInfo>
    for RenderPassBeginInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::RenderPassAttachmentBeginInfoBuilder<'_>>
    for RenderPassBeginInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::qcom_render_pass_transform::RenderPassTransformBeginInfoQCOM,
    > for RenderPassBeginInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::qcom_render_pass_transform::RenderPassTransformBeginInfoQCOMBuilder<'_>,
    > for RenderPassBeginInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkRenderPassBeginInfo.html) · Builder of [`RenderPassBeginInfo`]"]
#[repr(transparent)]
pub struct RenderPassBeginInfoBuilder<'a>(RenderPassBeginInfo, std::marker::PhantomData<&'a ()>);
impl<'a> RenderPassBeginInfoBuilder<'a> {
    #[inline]
    pub fn new() -> RenderPassBeginInfoBuilder<'a> {
        RenderPassBeginInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn render_pass(mut self, render_pass: crate::vk1_0::RenderPass) -> Self {
        self.0.render_pass = render_pass as _;
        self
    }
    #[inline]
    pub fn framebuffer(mut self, framebuffer: crate::vk1_0::Framebuffer) -> Self {
        self.0.framebuffer = framebuffer as _;
        self
    }
    #[inline]
    pub fn render_area(mut self, render_area: crate::vk1_0::Rect2D) -> Self {
        self.0.render_area = render_area as _;
        self
    }
    #[inline]
    pub fn clear_values(mut self, clear_values: &'a [crate::vk1_0::ClearValue]) -> Self {
        self.0.p_clear_values = clear_values.as_ptr() as _;
        self.0.clear_value_count = clear_values.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> RenderPassBeginInfo {
        self.0
    }
}
impl<'a> std::default::Default for RenderPassBeginInfoBuilder<'a> {
    fn default() -> RenderPassBeginInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for RenderPassBeginInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for RenderPassBeginInfoBuilder<'a> {
    type Target = RenderPassBeginInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for RenderPassBeginInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkClearColorValue.html) · Structure"]
#[doc(alias = "VkClearColorValue")]
#[derive(Copy, Clone)]
#[repr(C)]
pub union ClearColorValue {
    pub float32: [std::os::raw::c_float; 4],
    pub int32: [i32; 4],
    pub uint32: [u32; 4],
}
impl Default for ClearColorValue {
    fn default() -> Self {
        unsafe { std::mem::zeroed() }
    }
}
impl std::fmt::Debug for ClearColorValue {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ClearColorValue").finish()
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkClearDepthStencilValue.html) · Structure"]
#[doc(alias = "VkClearDepthStencilValue")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ClearDepthStencilValue {
    pub depth: std::os::raw::c_float,
    pub stencil: u32,
}
impl Default for ClearDepthStencilValue {
    fn default() -> Self {
        Self {
            depth: Default::default(),
            stencil: Default::default(),
        }
    }
}
impl std::fmt::Debug for ClearDepthStencilValue {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ClearDepthStencilValue")
            .field("depth", &self.depth)
            .field("stencil", &self.stencil)
            .finish()
    }
}
impl ClearDepthStencilValue {
    #[inline]
    pub fn into_builder<'a>(self) -> ClearDepthStencilValueBuilder<'a> {
        ClearDepthStencilValueBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkClearDepthStencilValue.html) · Builder of [`ClearDepthStencilValue`]"]
#[repr(transparent)]
pub struct ClearDepthStencilValueBuilder<'a>(
    ClearDepthStencilValue,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> ClearDepthStencilValueBuilder<'a> {
    #[inline]
    pub fn new() -> ClearDepthStencilValueBuilder<'a> {
        ClearDepthStencilValueBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn depth(mut self, depth: std::os::raw::c_float) -> Self {
        self.0.depth = depth as _;
        self
    }
    #[inline]
    pub fn stencil(mut self, stencil: u32) -> Self {
        self.0.stencil = stencil as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ClearDepthStencilValue {
        self.0
    }
}
impl<'a> std::default::Default for ClearDepthStencilValueBuilder<'a> {
    fn default() -> ClearDepthStencilValueBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ClearDepthStencilValueBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ClearDepthStencilValueBuilder<'a> {
    type Target = ClearDepthStencilValue;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ClearDepthStencilValueBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkClearValue.html) · Structure"]
#[doc(alias = "VkClearValue")]
#[derive(Copy, Clone)]
#[repr(C)]
pub union ClearValue {
    pub color: crate::vk1_0::ClearColorValue,
    pub depth_stencil: crate::vk1_0::ClearDepthStencilValue,
}
impl Default for ClearValue {
    fn default() -> Self {
        unsafe { std::mem::zeroed() }
    }
}
impl std::fmt::Debug for ClearValue {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ClearValue").finish()
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkClearAttachment.html) · Structure"]
#[doc(alias = "VkClearAttachment")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct ClearAttachment {
    pub aspect_mask: crate::vk1_0::ImageAspectFlags,
    pub color_attachment: u32,
    pub clear_value: crate::vk1_0::ClearValue,
}
impl Default for ClearAttachment {
    fn default() -> Self {
        Self {
            aspect_mask: Default::default(),
            color_attachment: Default::default(),
            clear_value: Default::default(),
        }
    }
}
impl std::fmt::Debug for ClearAttachment {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("ClearAttachment")
            .field("aspect_mask", &self.aspect_mask)
            .field("color_attachment", &self.color_attachment)
            .field("clear_value", &self.clear_value)
            .finish()
    }
}
impl ClearAttachment {
    #[inline]
    pub fn into_builder<'a>(self) -> ClearAttachmentBuilder<'a> {
        ClearAttachmentBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkClearAttachment.html) · Builder of [`ClearAttachment`]"]
#[repr(transparent)]
pub struct ClearAttachmentBuilder<'a>(ClearAttachment, std::marker::PhantomData<&'a ()>);
impl<'a> ClearAttachmentBuilder<'a> {
    #[inline]
    pub fn new() -> ClearAttachmentBuilder<'a> {
        ClearAttachmentBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn aspect_mask(mut self, aspect_mask: crate::vk1_0::ImageAspectFlags) -> Self {
        self.0.aspect_mask = aspect_mask as _;
        self
    }
    #[inline]
    pub fn color_attachment(mut self, color_attachment: u32) -> Self {
        self.0.color_attachment = color_attachment as _;
        self
    }
    #[inline]
    pub fn clear_value(mut self, clear_value: crate::vk1_0::ClearValue) -> Self {
        self.0.clear_value = clear_value as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> ClearAttachment {
        self.0
    }
}
impl<'a> std::default::Default for ClearAttachmentBuilder<'a> {
    fn default() -> ClearAttachmentBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for ClearAttachmentBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for ClearAttachmentBuilder<'a> {
    type Target = ClearAttachment;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for ClearAttachmentBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAttachmentDescription.html) · Structure"]
#[doc(alias = "VkAttachmentDescription")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct AttachmentDescription {
    pub flags: crate::vk1_0::AttachmentDescriptionFlags,
    pub format: crate::vk1_0::Format,
    pub samples: crate::vk1_0::SampleCountFlagBits,
    pub load_op: crate::vk1_0::AttachmentLoadOp,
    pub store_op: crate::vk1_0::AttachmentStoreOp,
    pub stencil_load_op: crate::vk1_0::AttachmentLoadOp,
    pub stencil_store_op: crate::vk1_0::AttachmentStoreOp,
    pub initial_layout: crate::vk1_0::ImageLayout,
    pub final_layout: crate::vk1_0::ImageLayout,
}
impl Default for AttachmentDescription {
    fn default() -> Self {
        Self {
            flags: Default::default(),
            format: Default::default(),
            samples: Default::default(),
            load_op: Default::default(),
            store_op: Default::default(),
            stencil_load_op: Default::default(),
            stencil_store_op: Default::default(),
            initial_layout: Default::default(),
            final_layout: Default::default(),
        }
    }
}
impl std::fmt::Debug for AttachmentDescription {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("AttachmentDescription")
            .field("flags", &self.flags)
            .field("format", &self.format)
            .field("samples", &self.samples)
            .field("load_op", &self.load_op)
            .field("store_op", &self.store_op)
            .field("stencil_load_op", &self.stencil_load_op)
            .field("stencil_store_op", &self.stencil_store_op)
            .field("initial_layout", &self.initial_layout)
            .field("final_layout", &self.final_layout)
            .finish()
    }
}
impl AttachmentDescription {
    #[inline]
    pub fn into_builder<'a>(self) -> AttachmentDescriptionBuilder<'a> {
        AttachmentDescriptionBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAttachmentDescription.html) · Builder of [`AttachmentDescription`]"]
#[repr(transparent)]
pub struct AttachmentDescriptionBuilder<'a>(
    AttachmentDescription,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> AttachmentDescriptionBuilder<'a> {
    #[inline]
    pub fn new() -> AttachmentDescriptionBuilder<'a> {
        AttachmentDescriptionBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::AttachmentDescriptionFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn format(mut self, format: crate::vk1_0::Format) -> Self {
        self.0.format = format as _;
        self
    }
    #[inline]
    pub fn samples(mut self, samples: crate::vk1_0::SampleCountFlagBits) -> Self {
        self.0.samples = samples as _;
        self
    }
    #[inline]
    pub fn load_op(mut self, load_op: crate::vk1_0::AttachmentLoadOp) -> Self {
        self.0.load_op = load_op as _;
        self
    }
    #[inline]
    pub fn store_op(mut self, store_op: crate::vk1_0::AttachmentStoreOp) -> Self {
        self.0.store_op = store_op as _;
        self
    }
    #[inline]
    pub fn stencil_load_op(mut self, stencil_load_op: crate::vk1_0::AttachmentLoadOp) -> Self {
        self.0.stencil_load_op = stencil_load_op as _;
        self
    }
    #[inline]
    pub fn stencil_store_op(mut self, stencil_store_op: crate::vk1_0::AttachmentStoreOp) -> Self {
        self.0.stencil_store_op = stencil_store_op as _;
        self
    }
    #[inline]
    pub fn initial_layout(mut self, initial_layout: crate::vk1_0::ImageLayout) -> Self {
        self.0.initial_layout = initial_layout as _;
        self
    }
    #[inline]
    pub fn final_layout(mut self, final_layout: crate::vk1_0::ImageLayout) -> Self {
        self.0.final_layout = final_layout as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> AttachmentDescription {
        self.0
    }
}
impl<'a> std::default::Default for AttachmentDescriptionBuilder<'a> {
    fn default() -> AttachmentDescriptionBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for AttachmentDescriptionBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for AttachmentDescriptionBuilder<'a> {
    type Target = AttachmentDescription;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for AttachmentDescriptionBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAttachmentReference.html) · Structure"]
#[doc(alias = "VkAttachmentReference")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct AttachmentReference {
    pub attachment: u32,
    pub layout: crate::vk1_0::ImageLayout,
}
impl Default for AttachmentReference {
    fn default() -> Self {
        Self {
            attachment: Default::default(),
            layout: Default::default(),
        }
    }
}
impl std::fmt::Debug for AttachmentReference {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("AttachmentReference")
            .field("attachment", &self.attachment)
            .field("layout", &self.layout)
            .finish()
    }
}
impl AttachmentReference {
    #[inline]
    pub fn into_builder<'a>(self) -> AttachmentReferenceBuilder<'a> {
        AttachmentReferenceBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkAttachmentReference.html) · Builder of [`AttachmentReference`]"]
#[repr(transparent)]
pub struct AttachmentReferenceBuilder<'a>(AttachmentReference, std::marker::PhantomData<&'a ()>);
impl<'a> AttachmentReferenceBuilder<'a> {
    #[inline]
    pub fn new() -> AttachmentReferenceBuilder<'a> {
        AttachmentReferenceBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn attachment(mut self, attachment: u32) -> Self {
        self.0.attachment = attachment as _;
        self
    }
    #[inline]
    pub fn layout(mut self, layout: crate::vk1_0::ImageLayout) -> Self {
        self.0.layout = layout as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> AttachmentReference {
        self.0
    }
}
impl<'a> std::default::Default for AttachmentReferenceBuilder<'a> {
    fn default() -> AttachmentReferenceBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for AttachmentReferenceBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for AttachmentReferenceBuilder<'a> {
    type Target = AttachmentReference;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for AttachmentReferenceBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubpassDescription.html) · Structure"]
#[doc(alias = "VkSubpassDescription")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SubpassDescription {
    pub flags: crate::vk1_0::SubpassDescriptionFlags,
    pub pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
    pub input_attachment_count: u32,
    pub p_input_attachments: *const crate::vk1_0::AttachmentReference,
    pub color_attachment_count: u32,
    pub p_color_attachments: *const crate::vk1_0::AttachmentReference,
    pub p_resolve_attachments: *const crate::vk1_0::AttachmentReference,
    pub p_depth_stencil_attachment: *const crate::vk1_0::AttachmentReference,
    pub preserve_attachment_count: u32,
    pub p_preserve_attachments: *const u32,
}
impl Default for SubpassDescription {
    fn default() -> Self {
        Self {
            flags: Default::default(),
            pipeline_bind_point: Default::default(),
            input_attachment_count: Default::default(),
            p_input_attachments: std::ptr::null(),
            color_attachment_count: Default::default(),
            p_color_attachments: std::ptr::null(),
            p_resolve_attachments: std::ptr::null(),
            p_depth_stencil_attachment: std::ptr::null(),
            preserve_attachment_count: Default::default(),
            p_preserve_attachments: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for SubpassDescription {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SubpassDescription")
            .field("flags", &self.flags)
            .field("pipeline_bind_point", &self.pipeline_bind_point)
            .field("input_attachment_count", &self.input_attachment_count)
            .field("p_input_attachments", &self.p_input_attachments)
            .field("color_attachment_count", &self.color_attachment_count)
            .field("p_color_attachments", &self.p_color_attachments)
            .field("p_resolve_attachments", &self.p_resolve_attachments)
            .field(
                "p_depth_stencil_attachment",
                &self.p_depth_stencil_attachment,
            )
            .field("preserve_attachment_count", &self.preserve_attachment_count)
            .field("p_preserve_attachments", &self.p_preserve_attachments)
            .finish()
    }
}
impl SubpassDescription {
    #[inline]
    pub fn into_builder<'a>(self) -> SubpassDescriptionBuilder<'a> {
        SubpassDescriptionBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubpassDescription.html) · Builder of [`SubpassDescription`]"]
#[repr(transparent)]
pub struct SubpassDescriptionBuilder<'a>(SubpassDescription, std::marker::PhantomData<&'a ()>);
impl<'a> SubpassDescriptionBuilder<'a> {
    #[inline]
    pub fn new() -> SubpassDescriptionBuilder<'a> {
        SubpassDescriptionBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::SubpassDescriptionFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn pipeline_bind_point(
        mut self,
        pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
    ) -> Self {
        self.0.pipeline_bind_point = pipeline_bind_point as _;
        self
    }
    #[inline]
    pub fn input_attachments(
        mut self,
        input_attachments: &'a [crate::vk1_0::AttachmentReferenceBuilder],
    ) -> Self {
        self.0.p_input_attachments = input_attachments.as_ptr() as _;
        self.0.input_attachment_count = input_attachments.len() as _;
        self
    }
    #[inline]
    pub fn color_attachments(
        mut self,
        color_attachments: &'a [crate::vk1_0::AttachmentReferenceBuilder],
    ) -> Self {
        self.0.p_color_attachments = color_attachments.as_ptr() as _;
        self.0.color_attachment_count = color_attachments.len() as _;
        self
    }
    #[inline]
    pub fn resolve_attachments(
        mut self,
        resolve_attachments: &'a [crate::vk1_0::AttachmentReferenceBuilder],
    ) -> Self {
        self.0.p_resolve_attachments = resolve_attachments.as_ptr() as _;
        self.0.color_attachment_count = resolve_attachments.len() as _;
        self
    }
    #[inline]
    pub fn depth_stencil_attachment(
        mut self,
        depth_stencil_attachment: &'a crate::vk1_0::AttachmentReference,
    ) -> Self {
        self.0.p_depth_stencil_attachment = depth_stencil_attachment as _;
        self
    }
    #[inline]
    pub fn preserve_attachments(mut self, preserve_attachments: &'a [u32]) -> Self {
        self.0.p_preserve_attachments = preserve_attachments.as_ptr() as _;
        self.0.preserve_attachment_count = preserve_attachments.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SubpassDescription {
        self.0
    }
}
impl<'a> std::default::Default for SubpassDescriptionBuilder<'a> {
    fn default() -> SubpassDescriptionBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SubpassDescriptionBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SubpassDescriptionBuilder<'a> {
    type Target = SubpassDescription;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SubpassDescriptionBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubpassDependency.html) · Structure"]
#[doc(alias = "VkSubpassDependency")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SubpassDependency {
    pub src_subpass: u32,
    pub dst_subpass: u32,
    pub src_stage_mask: crate::vk1_0::PipelineStageFlags,
    pub dst_stage_mask: crate::vk1_0::PipelineStageFlags,
    pub src_access_mask: crate::vk1_0::AccessFlags,
    pub dst_access_mask: crate::vk1_0::AccessFlags,
    pub dependency_flags: crate::vk1_0::DependencyFlags,
}
impl Default for SubpassDependency {
    fn default() -> Self {
        Self {
            src_subpass: Default::default(),
            dst_subpass: Default::default(),
            src_stage_mask: Default::default(),
            dst_stage_mask: Default::default(),
            src_access_mask: Default::default(),
            dst_access_mask: Default::default(),
            dependency_flags: Default::default(),
        }
    }
}
impl std::fmt::Debug for SubpassDependency {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SubpassDependency")
            .field("src_subpass", &self.src_subpass)
            .field("dst_subpass", &self.dst_subpass)
            .field("src_stage_mask", &self.src_stage_mask)
            .field("dst_stage_mask", &self.dst_stage_mask)
            .field("src_access_mask", &self.src_access_mask)
            .field("dst_access_mask", &self.dst_access_mask)
            .field("dependency_flags", &self.dependency_flags)
            .finish()
    }
}
impl SubpassDependency {
    #[inline]
    pub fn into_builder<'a>(self) -> SubpassDependencyBuilder<'a> {
        SubpassDependencyBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubpassDependency.html) · Builder of [`SubpassDependency`]"]
#[repr(transparent)]
pub struct SubpassDependencyBuilder<'a>(SubpassDependency, std::marker::PhantomData<&'a ()>);
impl<'a> SubpassDependencyBuilder<'a> {
    #[inline]
    pub fn new() -> SubpassDependencyBuilder<'a> {
        SubpassDependencyBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn src_subpass(mut self, src_subpass: u32) -> Self {
        self.0.src_subpass = src_subpass as _;
        self
    }
    #[inline]
    pub fn dst_subpass(mut self, dst_subpass: u32) -> Self {
        self.0.dst_subpass = dst_subpass as _;
        self
    }
    #[inline]
    pub fn src_stage_mask(mut self, src_stage_mask: crate::vk1_0::PipelineStageFlags) -> Self {
        self.0.src_stage_mask = src_stage_mask as _;
        self
    }
    #[inline]
    pub fn dst_stage_mask(mut self, dst_stage_mask: crate::vk1_0::PipelineStageFlags) -> Self {
        self.0.dst_stage_mask = dst_stage_mask as _;
        self
    }
    #[inline]
    pub fn src_access_mask(mut self, src_access_mask: crate::vk1_0::AccessFlags) -> Self {
        self.0.src_access_mask = src_access_mask as _;
        self
    }
    #[inline]
    pub fn dst_access_mask(mut self, dst_access_mask: crate::vk1_0::AccessFlags) -> Self {
        self.0.dst_access_mask = dst_access_mask as _;
        self
    }
    #[inline]
    pub fn dependency_flags(mut self, dependency_flags: crate::vk1_0::DependencyFlags) -> Self {
        self.0.dependency_flags = dependency_flags as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SubpassDependency {
        self.0
    }
}
impl<'a> std::default::Default for SubpassDependencyBuilder<'a> {
    fn default() -> SubpassDependencyBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SubpassDependencyBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SubpassDependencyBuilder<'a> {
    type Target = SubpassDependency;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SubpassDependencyBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkRenderPassCreateInfo.html) · Structure"]
#[doc(alias = "VkRenderPassCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct RenderPassCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::RenderPassCreateFlags,
    pub attachment_count: u32,
    pub p_attachments: *const crate::vk1_0::AttachmentDescription,
    pub subpass_count: u32,
    pub p_subpasses: *const crate::vk1_0::SubpassDescription,
    pub dependency_count: u32,
    pub p_dependencies: *const crate::vk1_0::SubpassDependency,
}
impl Default for RenderPassCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::RENDER_PASS_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            attachment_count: Default::default(),
            p_attachments: std::ptr::null(),
            subpass_count: Default::default(),
            p_subpasses: std::ptr::null(),
            dependency_count: Default::default(),
            p_dependencies: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for RenderPassCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("RenderPassCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("attachment_count", &self.attachment_count)
            .field("p_attachments", &self.p_attachments)
            .field("subpass_count", &self.subpass_count)
            .field("p_subpasses", &self.p_subpasses)
            .field("dependency_count", &self.dependency_count)
            .field("p_dependencies", &self.p_dependencies)
            .finish()
    }
}
impl RenderPassCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> RenderPassCreateInfoBuilder<'a> {
        RenderPassCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::RenderPassMultiviewCreateInfo>
    for RenderPassCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::RenderPassMultiviewCreateInfoBuilder<'_>>
    for RenderPassCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::RenderPassInputAttachmentAspectCreateInfo>
    for RenderPassCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<'a, crate::vk1_1::RenderPassInputAttachmentAspectCreateInfoBuilder<'_>>
    for RenderPassCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::ext_fragment_density_map::RenderPassFragmentDensityMapCreateInfoEXT,
    > for RenderPassCreateInfoBuilder<'a>
{
}
impl < 'a > crate :: ExtendableFrom < 'a , crate :: extensions :: ext_fragment_density_map :: RenderPassFragmentDensityMapCreateInfoEXTBuilder < '_ >> for RenderPassCreateInfoBuilder < 'a > { }
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkRenderPassCreateInfo.html) · Builder of [`RenderPassCreateInfo`]"]
#[repr(transparent)]
pub struct RenderPassCreateInfoBuilder<'a>(RenderPassCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> RenderPassCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> RenderPassCreateInfoBuilder<'a> {
        RenderPassCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::RenderPassCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn attachments(
        mut self,
        attachments: &'a [crate::vk1_0::AttachmentDescriptionBuilder],
    ) -> Self {
        self.0.p_attachments = attachments.as_ptr() as _;
        self.0.attachment_count = attachments.len() as _;
        self
    }
    #[inline]
    pub fn subpasses(mut self, subpasses: &'a [crate::vk1_0::SubpassDescriptionBuilder]) -> Self {
        self.0.p_subpasses = subpasses.as_ptr() as _;
        self.0.subpass_count = subpasses.len() as _;
        self
    }
    #[inline]
    pub fn dependencies(
        mut self,
        dependencies: &'a [crate::vk1_0::SubpassDependencyBuilder],
    ) -> Self {
        self.0.p_dependencies = dependencies.as_ptr() as _;
        self.0.dependency_count = dependencies.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> RenderPassCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for RenderPassCreateInfoBuilder<'a> {
    fn default() -> RenderPassCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for RenderPassCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for RenderPassCreateInfoBuilder<'a> {
    type Target = RenderPassCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for RenderPassCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkEventCreateInfo.html) · Structure"]
#[doc(alias = "VkEventCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct EventCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::EventCreateFlags,
}
impl Default for EventCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::EVENT_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
        }
    }
}
impl std::fmt::Debug for EventCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("EventCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .finish()
    }
}
impl EventCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> EventCreateInfoBuilder<'a> {
        EventCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkEventCreateInfo.html) · Builder of [`EventCreateInfo`]"]
#[repr(transparent)]
pub struct EventCreateInfoBuilder<'a>(EventCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> EventCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> EventCreateInfoBuilder<'a> {
        EventCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::EventCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> EventCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for EventCreateInfoBuilder<'a> {
    fn default() -> EventCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for EventCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for EventCreateInfoBuilder<'a> {
    type Target = EventCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for EventCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFenceCreateInfo.html) · Structure"]
#[doc(alias = "VkFenceCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct FenceCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::FenceCreateFlags,
}
impl Default for FenceCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::FENCE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
        }
    }
}
impl std::fmt::Debug for FenceCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("FenceCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .finish()
    }
}
impl FenceCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> FenceCreateInfoBuilder<'a> {
        FenceCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExportFenceCreateInfo>
    for FenceCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExportFenceCreateInfoBuilder<'_>>
    for FenceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_fence_win32::ExportFenceWin32HandleInfoKHR,
    > for FenceCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_fence_win32::ExportFenceWin32HandleInfoKHRBuilder<'_>,
    > for FenceCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFenceCreateInfo.html) · Builder of [`FenceCreateInfo`]"]
#[repr(transparent)]
pub struct FenceCreateInfoBuilder<'a>(FenceCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> FenceCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> FenceCreateInfoBuilder<'a> {
        FenceCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::FenceCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> FenceCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for FenceCreateInfoBuilder<'a> {
    fn default() -> FenceCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for FenceCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for FenceCreateInfoBuilder<'a> {
    type Target = FenceCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for FenceCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceFeatures.html) · Structure"]
#[doc(alias = "VkPhysicalDeviceFeatures")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PhysicalDeviceFeatures {
    pub robust_buffer_access: crate::vk1_0::Bool32,
    pub full_draw_index_uint32: crate::vk1_0::Bool32,
    pub image_cube_array: crate::vk1_0::Bool32,
    pub independent_blend: crate::vk1_0::Bool32,
    pub geometry_shader: crate::vk1_0::Bool32,
    pub tessellation_shader: crate::vk1_0::Bool32,
    pub sample_rate_shading: crate::vk1_0::Bool32,
    pub dual_src_blend: crate::vk1_0::Bool32,
    pub logic_op: crate::vk1_0::Bool32,
    pub multi_draw_indirect: crate::vk1_0::Bool32,
    pub draw_indirect_first_instance: crate::vk1_0::Bool32,
    pub depth_clamp: crate::vk1_0::Bool32,
    pub depth_bias_clamp: crate::vk1_0::Bool32,
    pub fill_mode_non_solid: crate::vk1_0::Bool32,
    pub depth_bounds: crate::vk1_0::Bool32,
    pub wide_lines: crate::vk1_0::Bool32,
    pub large_points: crate::vk1_0::Bool32,
    pub alpha_to_one: crate::vk1_0::Bool32,
    pub multi_viewport: crate::vk1_0::Bool32,
    pub sampler_anisotropy: crate::vk1_0::Bool32,
    pub texture_compression_etc2: crate::vk1_0::Bool32,
    pub texture_compression_astc_ldr: crate::vk1_0::Bool32,
    pub texture_compression_bc: crate::vk1_0::Bool32,
    pub occlusion_query_precise: crate::vk1_0::Bool32,
    pub pipeline_statistics_query: crate::vk1_0::Bool32,
    pub vertex_pipeline_stores_and_atomics: crate::vk1_0::Bool32,
    pub fragment_stores_and_atomics: crate::vk1_0::Bool32,
    pub shader_tessellation_and_geometry_point_size: crate::vk1_0::Bool32,
    pub shader_image_gather_extended: crate::vk1_0::Bool32,
    pub shader_storage_image_extended_formats: crate::vk1_0::Bool32,
    pub shader_storage_image_multisample: crate::vk1_0::Bool32,
    pub shader_storage_image_read_without_format: crate::vk1_0::Bool32,
    pub shader_storage_image_write_without_format: crate::vk1_0::Bool32,
    pub shader_uniform_buffer_array_dynamic_indexing: crate::vk1_0::Bool32,
    pub shader_sampled_image_array_dynamic_indexing: crate::vk1_0::Bool32,
    pub shader_storage_buffer_array_dynamic_indexing: crate::vk1_0::Bool32,
    pub shader_storage_image_array_dynamic_indexing: crate::vk1_0::Bool32,
    pub shader_clip_distance: crate::vk1_0::Bool32,
    pub shader_cull_distance: crate::vk1_0::Bool32,
    pub shader_float64: crate::vk1_0::Bool32,
    pub shader_int64: crate::vk1_0::Bool32,
    pub shader_int16: crate::vk1_0::Bool32,
    pub shader_resource_residency: crate::vk1_0::Bool32,
    pub shader_resource_min_lod: crate::vk1_0::Bool32,
    pub sparse_binding: crate::vk1_0::Bool32,
    pub sparse_residency_buffer: crate::vk1_0::Bool32,
    pub sparse_residency_image2_d: crate::vk1_0::Bool32,
    pub sparse_residency_image3_d: crate::vk1_0::Bool32,
    pub sparse_residency2_samples: crate::vk1_0::Bool32,
    pub sparse_residency4_samples: crate::vk1_0::Bool32,
    pub sparse_residency8_samples: crate::vk1_0::Bool32,
    pub sparse_residency16_samples: crate::vk1_0::Bool32,
    pub sparse_residency_aliased: crate::vk1_0::Bool32,
    pub variable_multisample_rate: crate::vk1_0::Bool32,
    pub inherited_queries: crate::vk1_0::Bool32,
}
impl Default for PhysicalDeviceFeatures {
    fn default() -> Self {
        Self {
            robust_buffer_access: Default::default(),
            full_draw_index_uint32: Default::default(),
            image_cube_array: Default::default(),
            independent_blend: Default::default(),
            geometry_shader: Default::default(),
            tessellation_shader: Default::default(),
            sample_rate_shading: Default::default(),
            dual_src_blend: Default::default(),
            logic_op: Default::default(),
            multi_draw_indirect: Default::default(),
            draw_indirect_first_instance: Default::default(),
            depth_clamp: Default::default(),
            depth_bias_clamp: Default::default(),
            fill_mode_non_solid: Default::default(),
            depth_bounds: Default::default(),
            wide_lines: Default::default(),
            large_points: Default::default(),
            alpha_to_one: Default::default(),
            multi_viewport: Default::default(),
            sampler_anisotropy: Default::default(),
            texture_compression_etc2: Default::default(),
            texture_compression_astc_ldr: Default::default(),
            texture_compression_bc: Default::default(),
            occlusion_query_precise: Default::default(),
            pipeline_statistics_query: Default::default(),
            vertex_pipeline_stores_and_atomics: Default::default(),
            fragment_stores_and_atomics: Default::default(),
            shader_tessellation_and_geometry_point_size: Default::default(),
            shader_image_gather_extended: Default::default(),
            shader_storage_image_extended_formats: Default::default(),
            shader_storage_image_multisample: Default::default(),
            shader_storage_image_read_without_format: Default::default(),
            shader_storage_image_write_without_format: Default::default(),
            shader_uniform_buffer_array_dynamic_indexing: Default::default(),
            shader_sampled_image_array_dynamic_indexing: Default::default(),
            shader_storage_buffer_array_dynamic_indexing: Default::default(),
            shader_storage_image_array_dynamic_indexing: Default::default(),
            shader_clip_distance: Default::default(),
            shader_cull_distance: Default::default(),
            shader_float64: Default::default(),
            shader_int64: Default::default(),
            shader_int16: Default::default(),
            shader_resource_residency: Default::default(),
            shader_resource_min_lod: Default::default(),
            sparse_binding: Default::default(),
            sparse_residency_buffer: Default::default(),
            sparse_residency_image2_d: Default::default(),
            sparse_residency_image3_d: Default::default(),
            sparse_residency2_samples: Default::default(),
            sparse_residency4_samples: Default::default(),
            sparse_residency8_samples: Default::default(),
            sparse_residency16_samples: Default::default(),
            sparse_residency_aliased: Default::default(),
            variable_multisample_rate: Default::default(),
            inherited_queries: Default::default(),
        }
    }
}
impl std::fmt::Debug for PhysicalDeviceFeatures {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PhysicalDeviceFeatures")
            .field("robust_buffer_access", &(self.robust_buffer_access != 0))
            .field(
                "full_draw_index_uint32",
                &(self.full_draw_index_uint32 != 0),
            )
            .field("image_cube_array", &(self.image_cube_array != 0))
            .field("independent_blend", &(self.independent_blend != 0))
            .field("geometry_shader", &(self.geometry_shader != 0))
            .field("tessellation_shader", &(self.tessellation_shader != 0))
            .field("sample_rate_shading", &(self.sample_rate_shading != 0))
            .field("dual_src_blend", &(self.dual_src_blend != 0))
            .field("logic_op", &(self.logic_op != 0))
            .field("multi_draw_indirect", &(self.multi_draw_indirect != 0))
            .field(
                "draw_indirect_first_instance",
                &(self.draw_indirect_first_instance != 0),
            )
            .field("depth_clamp", &(self.depth_clamp != 0))
            .field("depth_bias_clamp", &(self.depth_bias_clamp != 0))
            .field("fill_mode_non_solid", &(self.fill_mode_non_solid != 0))
            .field("depth_bounds", &(self.depth_bounds != 0))
            .field("wide_lines", &(self.wide_lines != 0))
            .field("large_points", &(self.large_points != 0))
            .field("alpha_to_one", &(self.alpha_to_one != 0))
            .field("multi_viewport", &(self.multi_viewport != 0))
            .field("sampler_anisotropy", &(self.sampler_anisotropy != 0))
            .field(
                "texture_compression_etc2",
                &(self.texture_compression_etc2 != 0),
            )
            .field(
                "texture_compression_astc_ldr",
                &(self.texture_compression_astc_ldr != 0),
            )
            .field(
                "texture_compression_bc",
                &(self.texture_compression_bc != 0),
            )
            .field(
                "occlusion_query_precise",
                &(self.occlusion_query_precise != 0),
            )
            .field(
                "pipeline_statistics_query",
                &(self.pipeline_statistics_query != 0),
            )
            .field(
                "vertex_pipeline_stores_and_atomics",
                &(self.vertex_pipeline_stores_and_atomics != 0),
            )
            .field(
                "fragment_stores_and_atomics",
                &(self.fragment_stores_and_atomics != 0),
            )
            .field(
                "shader_tessellation_and_geometry_point_size",
                &(self.shader_tessellation_and_geometry_point_size != 0),
            )
            .field(
                "shader_image_gather_extended",
                &(self.shader_image_gather_extended != 0),
            )
            .field(
                "shader_storage_image_extended_formats",
                &(self.shader_storage_image_extended_formats != 0),
            )
            .field(
                "shader_storage_image_multisample",
                &(self.shader_storage_image_multisample != 0),
            )
            .field(
                "shader_storage_image_read_without_format",
                &(self.shader_storage_image_read_without_format != 0),
            )
            .field(
                "shader_storage_image_write_without_format",
                &(self.shader_storage_image_write_without_format != 0),
            )
            .field(
                "shader_uniform_buffer_array_dynamic_indexing",
                &(self.shader_uniform_buffer_array_dynamic_indexing != 0),
            )
            .field(
                "shader_sampled_image_array_dynamic_indexing",
                &(self.shader_sampled_image_array_dynamic_indexing != 0),
            )
            .field(
                "shader_storage_buffer_array_dynamic_indexing",
                &(self.shader_storage_buffer_array_dynamic_indexing != 0),
            )
            .field(
                "shader_storage_image_array_dynamic_indexing",
                &(self.shader_storage_image_array_dynamic_indexing != 0),
            )
            .field("shader_clip_distance", &(self.shader_clip_distance != 0))
            .field("shader_cull_distance", &(self.shader_cull_distance != 0))
            .field("shader_float64", &(self.shader_float64 != 0))
            .field("shader_int64", &(self.shader_int64 != 0))
            .field("shader_int16", &(self.shader_int16 != 0))
            .field(
                "shader_resource_residency",
                &(self.shader_resource_residency != 0),
            )
            .field(
                "shader_resource_min_lod",
                &(self.shader_resource_min_lod != 0),
            )
            .field("sparse_binding", &(self.sparse_binding != 0))
            .field(
                "sparse_residency_buffer",
                &(self.sparse_residency_buffer != 0),
            )
            .field(
                "sparse_residency_image2_d",
                &(self.sparse_residency_image2_d != 0),
            )
            .field(
                "sparse_residency_image3_d",
                &(self.sparse_residency_image3_d != 0),
            )
            .field(
                "sparse_residency2_samples",
                &(self.sparse_residency2_samples != 0),
            )
            .field(
                "sparse_residency4_samples",
                &(self.sparse_residency4_samples != 0),
            )
            .field(
                "sparse_residency8_samples",
                &(self.sparse_residency8_samples != 0),
            )
            .field(
                "sparse_residency16_samples",
                &(self.sparse_residency16_samples != 0),
            )
            .field(
                "sparse_residency_aliased",
                &(self.sparse_residency_aliased != 0),
            )
            .field(
                "variable_multisample_rate",
                &(self.variable_multisample_rate != 0),
            )
            .field("inherited_queries", &(self.inherited_queries != 0))
            .finish()
    }
}
impl PhysicalDeviceFeatures {
    #[inline]
    pub fn into_builder<'a>(self) -> PhysicalDeviceFeaturesBuilder<'a> {
        PhysicalDeviceFeaturesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceFeatures.html) · Builder of [`PhysicalDeviceFeatures`]"]
#[repr(transparent)]
pub struct PhysicalDeviceFeaturesBuilder<'a>(
    PhysicalDeviceFeatures,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PhysicalDeviceFeaturesBuilder<'a> {
    #[inline]
    pub fn new() -> PhysicalDeviceFeaturesBuilder<'a> {
        PhysicalDeviceFeaturesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn robust_buffer_access(mut self, robust_buffer_access: bool) -> Self {
        self.0.robust_buffer_access = robust_buffer_access as _;
        self
    }
    #[inline]
    pub fn full_draw_index_uint32(mut self, full_draw_index_uint32: bool) -> Self {
        self.0.full_draw_index_uint32 = full_draw_index_uint32 as _;
        self
    }
    #[inline]
    pub fn image_cube_array(mut self, image_cube_array: bool) -> Self {
        self.0.image_cube_array = image_cube_array as _;
        self
    }
    #[inline]
    pub fn independent_blend(mut self, independent_blend: bool) -> Self {
        self.0.independent_blend = independent_blend as _;
        self
    }
    #[inline]
    pub fn geometry_shader(mut self, geometry_shader: bool) -> Self {
        self.0.geometry_shader = geometry_shader as _;
        self
    }
    #[inline]
    pub fn tessellation_shader(mut self, tessellation_shader: bool) -> Self {
        self.0.tessellation_shader = tessellation_shader as _;
        self
    }
    #[inline]
    pub fn sample_rate_shading(mut self, sample_rate_shading: bool) -> Self {
        self.0.sample_rate_shading = sample_rate_shading as _;
        self
    }
    #[inline]
    pub fn dual_src_blend(mut self, dual_src_blend: bool) -> Self {
        self.0.dual_src_blend = dual_src_blend as _;
        self
    }
    #[inline]
    pub fn logic_op(mut self, logic_op: bool) -> Self {
        self.0.logic_op = logic_op as _;
        self
    }
    #[inline]
    pub fn multi_draw_indirect(mut self, multi_draw_indirect: bool) -> Self {
        self.0.multi_draw_indirect = multi_draw_indirect as _;
        self
    }
    #[inline]
    pub fn draw_indirect_first_instance(mut self, draw_indirect_first_instance: bool) -> Self {
        self.0.draw_indirect_first_instance = draw_indirect_first_instance as _;
        self
    }
    #[inline]
    pub fn depth_clamp(mut self, depth_clamp: bool) -> Self {
        self.0.depth_clamp = depth_clamp as _;
        self
    }
    #[inline]
    pub fn depth_bias_clamp(mut self, depth_bias_clamp: bool) -> Self {
        self.0.depth_bias_clamp = depth_bias_clamp as _;
        self
    }
    #[inline]
    pub fn fill_mode_non_solid(mut self, fill_mode_non_solid: bool) -> Self {
        self.0.fill_mode_non_solid = fill_mode_non_solid as _;
        self
    }
    #[inline]
    pub fn depth_bounds(mut self, depth_bounds: bool) -> Self {
        self.0.depth_bounds = depth_bounds as _;
        self
    }
    #[inline]
    pub fn wide_lines(mut self, wide_lines: bool) -> Self {
        self.0.wide_lines = wide_lines as _;
        self
    }
    #[inline]
    pub fn large_points(mut self, large_points: bool) -> Self {
        self.0.large_points = large_points as _;
        self
    }
    #[inline]
    pub fn alpha_to_one(mut self, alpha_to_one: bool) -> Self {
        self.0.alpha_to_one = alpha_to_one as _;
        self
    }
    #[inline]
    pub fn multi_viewport(mut self, multi_viewport: bool) -> Self {
        self.0.multi_viewport = multi_viewport as _;
        self
    }
    #[inline]
    pub fn sampler_anisotropy(mut self, sampler_anisotropy: bool) -> Self {
        self.0.sampler_anisotropy = sampler_anisotropy as _;
        self
    }
    #[inline]
    pub fn texture_compression_etc2(mut self, texture_compression_etc2: bool) -> Self {
        self.0.texture_compression_etc2 = texture_compression_etc2 as _;
        self
    }
    #[inline]
    pub fn texture_compression_astc_ldr(mut self, texture_compression_astc_ldr: bool) -> Self {
        self.0.texture_compression_astc_ldr = texture_compression_astc_ldr as _;
        self
    }
    #[inline]
    pub fn texture_compression_bc(mut self, texture_compression_bc: bool) -> Self {
        self.0.texture_compression_bc = texture_compression_bc as _;
        self
    }
    #[inline]
    pub fn occlusion_query_precise(mut self, occlusion_query_precise: bool) -> Self {
        self.0.occlusion_query_precise = occlusion_query_precise as _;
        self
    }
    #[inline]
    pub fn pipeline_statistics_query(mut self, pipeline_statistics_query: bool) -> Self {
        self.0.pipeline_statistics_query = pipeline_statistics_query as _;
        self
    }
    #[inline]
    pub fn vertex_pipeline_stores_and_atomics(
        mut self,
        vertex_pipeline_stores_and_atomics: bool,
    ) -> Self {
        self.0.vertex_pipeline_stores_and_atomics = vertex_pipeline_stores_and_atomics as _;
        self
    }
    #[inline]
    pub fn fragment_stores_and_atomics(mut self, fragment_stores_and_atomics: bool) -> Self {
        self.0.fragment_stores_and_atomics = fragment_stores_and_atomics as _;
        self
    }
    #[inline]
    pub fn shader_tessellation_and_geometry_point_size(
        mut self,
        shader_tessellation_and_geometry_point_size: bool,
    ) -> Self {
        self.0.shader_tessellation_and_geometry_point_size =
            shader_tessellation_and_geometry_point_size as _;
        self
    }
    #[inline]
    pub fn shader_image_gather_extended(mut self, shader_image_gather_extended: bool) -> Self {
        self.0.shader_image_gather_extended = shader_image_gather_extended as _;
        self
    }
    #[inline]
    pub fn shader_storage_image_extended_formats(
        mut self,
        shader_storage_image_extended_formats: bool,
    ) -> Self {
        self.0.shader_storage_image_extended_formats = shader_storage_image_extended_formats as _;
        self
    }
    #[inline]
    pub fn shader_storage_image_multisample(
        mut self,
        shader_storage_image_multisample: bool,
    ) -> Self {
        self.0.shader_storage_image_multisample = shader_storage_image_multisample as _;
        self
    }
    #[inline]
    pub fn shader_storage_image_read_without_format(
        mut self,
        shader_storage_image_read_without_format: bool,
    ) -> Self {
        self.0.shader_storage_image_read_without_format =
            shader_storage_image_read_without_format as _;
        self
    }
    #[inline]
    pub fn shader_storage_image_write_without_format(
        mut self,
        shader_storage_image_write_without_format: bool,
    ) -> Self {
        self.0.shader_storage_image_write_without_format =
            shader_storage_image_write_without_format as _;
        self
    }
    #[inline]
    pub fn shader_uniform_buffer_array_dynamic_indexing(
        mut self,
        shader_uniform_buffer_array_dynamic_indexing: bool,
    ) -> Self {
        self.0.shader_uniform_buffer_array_dynamic_indexing =
            shader_uniform_buffer_array_dynamic_indexing as _;
        self
    }
    #[inline]
    pub fn shader_sampled_image_array_dynamic_indexing(
        mut self,
        shader_sampled_image_array_dynamic_indexing: bool,
    ) -> Self {
        self.0.shader_sampled_image_array_dynamic_indexing =
            shader_sampled_image_array_dynamic_indexing as _;
        self
    }
    #[inline]
    pub fn shader_storage_buffer_array_dynamic_indexing(
        mut self,
        shader_storage_buffer_array_dynamic_indexing: bool,
    ) -> Self {
        self.0.shader_storage_buffer_array_dynamic_indexing =
            shader_storage_buffer_array_dynamic_indexing as _;
        self
    }
    #[inline]
    pub fn shader_storage_image_array_dynamic_indexing(
        mut self,
        shader_storage_image_array_dynamic_indexing: bool,
    ) -> Self {
        self.0.shader_storage_image_array_dynamic_indexing =
            shader_storage_image_array_dynamic_indexing as _;
        self
    }
    #[inline]
    pub fn shader_clip_distance(mut self, shader_clip_distance: bool) -> Self {
        self.0.shader_clip_distance = shader_clip_distance as _;
        self
    }
    #[inline]
    pub fn shader_cull_distance(mut self, shader_cull_distance: bool) -> Self {
        self.0.shader_cull_distance = shader_cull_distance as _;
        self
    }
    #[inline]
    pub fn shader_float64(mut self, shader_float64: bool) -> Self {
        self.0.shader_float64 = shader_float64 as _;
        self
    }
    #[inline]
    pub fn shader_int64(mut self, shader_int64: bool) -> Self {
        self.0.shader_int64 = shader_int64 as _;
        self
    }
    #[inline]
    pub fn shader_int16(mut self, shader_int16: bool) -> Self {
        self.0.shader_int16 = shader_int16 as _;
        self
    }
    #[inline]
    pub fn shader_resource_residency(mut self, shader_resource_residency: bool) -> Self {
        self.0.shader_resource_residency = shader_resource_residency as _;
        self
    }
    #[inline]
    pub fn shader_resource_min_lod(mut self, shader_resource_min_lod: bool) -> Self {
        self.0.shader_resource_min_lod = shader_resource_min_lod as _;
        self
    }
    #[inline]
    pub fn sparse_binding(mut self, sparse_binding: bool) -> Self {
        self.0.sparse_binding = sparse_binding as _;
        self
    }
    #[inline]
    pub fn sparse_residency_buffer(mut self, sparse_residency_buffer: bool) -> Self {
        self.0.sparse_residency_buffer = sparse_residency_buffer as _;
        self
    }
    #[inline]
    pub fn sparse_residency_image2_d(mut self, sparse_residency_image2_d: bool) -> Self {
        self.0.sparse_residency_image2_d = sparse_residency_image2_d as _;
        self
    }
    #[inline]
    pub fn sparse_residency_image3_d(mut self, sparse_residency_image3_d: bool) -> Self {
        self.0.sparse_residency_image3_d = sparse_residency_image3_d as _;
        self
    }
    #[inline]
    pub fn sparse_residency2_samples(mut self, sparse_residency2_samples: bool) -> Self {
        self.0.sparse_residency2_samples = sparse_residency2_samples as _;
        self
    }
    #[inline]
    pub fn sparse_residency4_samples(mut self, sparse_residency4_samples: bool) -> Self {
        self.0.sparse_residency4_samples = sparse_residency4_samples as _;
        self
    }
    #[inline]
    pub fn sparse_residency8_samples(mut self, sparse_residency8_samples: bool) -> Self {
        self.0.sparse_residency8_samples = sparse_residency8_samples as _;
        self
    }
    #[inline]
    pub fn sparse_residency16_samples(mut self, sparse_residency16_samples: bool) -> Self {
        self.0.sparse_residency16_samples = sparse_residency16_samples as _;
        self
    }
    #[inline]
    pub fn sparse_residency_aliased(mut self, sparse_residency_aliased: bool) -> Self {
        self.0.sparse_residency_aliased = sparse_residency_aliased as _;
        self
    }
    #[inline]
    pub fn variable_multisample_rate(mut self, variable_multisample_rate: bool) -> Self {
        self.0.variable_multisample_rate = variable_multisample_rate as _;
        self
    }
    #[inline]
    pub fn inherited_queries(mut self, inherited_queries: bool) -> Self {
        self.0.inherited_queries = inherited_queries as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PhysicalDeviceFeatures {
        self.0
    }
}
impl<'a> std::default::Default for PhysicalDeviceFeaturesBuilder<'a> {
    fn default() -> PhysicalDeviceFeaturesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PhysicalDeviceFeaturesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PhysicalDeviceFeaturesBuilder<'a> {
    type Target = PhysicalDeviceFeatures;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PhysicalDeviceFeaturesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceSparseProperties.html) · Structure"]
#[doc(alias = "VkPhysicalDeviceSparseProperties")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PhysicalDeviceSparseProperties {
    pub residency_standard2_d_block_shape: crate::vk1_0::Bool32,
    pub residency_standard2_d_multisample_block_shape: crate::vk1_0::Bool32,
    pub residency_standard3_d_block_shape: crate::vk1_0::Bool32,
    pub residency_aligned_mip_size: crate::vk1_0::Bool32,
    pub residency_non_resident_strict: crate::vk1_0::Bool32,
}
impl Default for PhysicalDeviceSparseProperties {
    fn default() -> Self {
        Self {
            residency_standard2_d_block_shape: Default::default(),
            residency_standard2_d_multisample_block_shape: Default::default(),
            residency_standard3_d_block_shape: Default::default(),
            residency_aligned_mip_size: Default::default(),
            residency_non_resident_strict: Default::default(),
        }
    }
}
impl std::fmt::Debug for PhysicalDeviceSparseProperties {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PhysicalDeviceSparseProperties")
            .field(
                "residency_standard2_d_block_shape",
                &(self.residency_standard2_d_block_shape != 0),
            )
            .field(
                "residency_standard2_d_multisample_block_shape",
                &(self.residency_standard2_d_multisample_block_shape != 0),
            )
            .field(
                "residency_standard3_d_block_shape",
                &(self.residency_standard3_d_block_shape != 0),
            )
            .field(
                "residency_aligned_mip_size",
                &(self.residency_aligned_mip_size != 0),
            )
            .field(
                "residency_non_resident_strict",
                &(self.residency_non_resident_strict != 0),
            )
            .finish()
    }
}
impl PhysicalDeviceSparseProperties {
    #[inline]
    pub fn into_builder<'a>(self) -> PhysicalDeviceSparsePropertiesBuilder<'a> {
        PhysicalDeviceSparsePropertiesBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceSparseProperties.html) · Builder of [`PhysicalDeviceSparseProperties`]"]
#[repr(transparent)]
pub struct PhysicalDeviceSparsePropertiesBuilder<'a>(
    PhysicalDeviceSparseProperties,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> PhysicalDeviceSparsePropertiesBuilder<'a> {
    #[inline]
    pub fn new() -> PhysicalDeviceSparsePropertiesBuilder<'a> {
        PhysicalDeviceSparsePropertiesBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn residency_standard2_d_block_shape(
        mut self,
        residency_standard2_d_block_shape: bool,
    ) -> Self {
        self.0.residency_standard2_d_block_shape = residency_standard2_d_block_shape as _;
        self
    }
    #[inline]
    pub fn residency_standard2_d_multisample_block_shape(
        mut self,
        residency_standard2_d_multisample_block_shape: bool,
    ) -> Self {
        self.0.residency_standard2_d_multisample_block_shape =
            residency_standard2_d_multisample_block_shape as _;
        self
    }
    #[inline]
    pub fn residency_standard3_d_block_shape(
        mut self,
        residency_standard3_d_block_shape: bool,
    ) -> Self {
        self.0.residency_standard3_d_block_shape = residency_standard3_d_block_shape as _;
        self
    }
    #[inline]
    pub fn residency_aligned_mip_size(mut self, residency_aligned_mip_size: bool) -> Self {
        self.0.residency_aligned_mip_size = residency_aligned_mip_size as _;
        self
    }
    #[inline]
    pub fn residency_non_resident_strict(mut self, residency_non_resident_strict: bool) -> Self {
        self.0.residency_non_resident_strict = residency_non_resident_strict as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PhysicalDeviceSparseProperties {
        self.0
    }
}
impl<'a> std::default::Default for PhysicalDeviceSparsePropertiesBuilder<'a> {
    fn default() -> PhysicalDeviceSparsePropertiesBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PhysicalDeviceSparsePropertiesBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PhysicalDeviceSparsePropertiesBuilder<'a> {
    type Target = PhysicalDeviceSparseProperties;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PhysicalDeviceSparsePropertiesBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceLimits.html) · Structure"]
#[doc(alias = "VkPhysicalDeviceLimits")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct PhysicalDeviceLimits {
    pub max_image_dimension1_d: u32,
    pub max_image_dimension2_d: u32,
    pub max_image_dimension3_d: u32,
    pub max_image_dimension_cube: u32,
    pub max_image_array_layers: u32,
    pub max_texel_buffer_elements: u32,
    pub max_uniform_buffer_range: u32,
    pub max_storage_buffer_range: u32,
    pub max_push_constants_size: u32,
    pub max_memory_allocation_count: u32,
    pub max_sampler_allocation_count: u32,
    pub buffer_image_granularity: crate::vk1_0::DeviceSize,
    pub sparse_address_space_size: crate::vk1_0::DeviceSize,
    pub max_bound_descriptor_sets: u32,
    pub max_per_stage_descriptor_samplers: u32,
    pub max_per_stage_descriptor_uniform_buffers: u32,
    pub max_per_stage_descriptor_storage_buffers: u32,
    pub max_per_stage_descriptor_sampled_images: u32,
    pub max_per_stage_descriptor_storage_images: u32,
    pub max_per_stage_descriptor_input_attachments: u32,
    pub max_per_stage_resources: u32,
    pub max_descriptor_set_samplers: u32,
    pub max_descriptor_set_uniform_buffers: u32,
    pub max_descriptor_set_uniform_buffers_dynamic: u32,
    pub max_descriptor_set_storage_buffers: u32,
    pub max_descriptor_set_storage_buffers_dynamic: u32,
    pub max_descriptor_set_sampled_images: u32,
    pub max_descriptor_set_storage_images: u32,
    pub max_descriptor_set_input_attachments: u32,
    pub max_vertex_input_attributes: u32,
    pub max_vertex_input_bindings: u32,
    pub max_vertex_input_attribute_offset: u32,
    pub max_vertex_input_binding_stride: u32,
    pub max_vertex_output_components: u32,
    pub max_tessellation_generation_level: u32,
    pub max_tessellation_patch_size: u32,
    pub max_tessellation_control_per_vertex_input_components: u32,
    pub max_tessellation_control_per_vertex_output_components: u32,
    pub max_tessellation_control_per_patch_output_components: u32,
    pub max_tessellation_control_total_output_components: u32,
    pub max_tessellation_evaluation_input_components: u32,
    pub max_tessellation_evaluation_output_components: u32,
    pub max_geometry_shader_invocations: u32,
    pub max_geometry_input_components: u32,
    pub max_geometry_output_components: u32,
    pub max_geometry_output_vertices: u32,
    pub max_geometry_total_output_components: u32,
    pub max_fragment_input_components: u32,
    pub max_fragment_output_attachments: u32,
    pub max_fragment_dual_src_attachments: u32,
    pub max_fragment_combined_output_resources: u32,
    pub max_compute_shared_memory_size: u32,
    pub max_compute_work_group_count: [u32; 3],
    pub max_compute_work_group_invocations: u32,
    pub max_compute_work_group_size: [u32; 3],
    pub sub_pixel_precision_bits: u32,
    pub sub_texel_precision_bits: u32,
    pub mipmap_precision_bits: u32,
    pub max_draw_indexed_index_value: u32,
    pub max_draw_indirect_count: u32,
    pub max_sampler_lod_bias: std::os::raw::c_float,
    pub max_sampler_anisotropy: std::os::raw::c_float,
    pub max_viewports: u32,
    pub max_viewport_dimensions: [u32; 2],
    pub viewport_bounds_range: [std::os::raw::c_float; 2],
    pub viewport_sub_pixel_bits: u32,
    pub min_memory_map_alignment: usize,
    pub min_texel_buffer_offset_alignment: crate::vk1_0::DeviceSize,
    pub min_uniform_buffer_offset_alignment: crate::vk1_0::DeviceSize,
    pub min_storage_buffer_offset_alignment: crate::vk1_0::DeviceSize,
    pub min_texel_offset: i32,
    pub max_texel_offset: u32,
    pub min_texel_gather_offset: i32,
    pub max_texel_gather_offset: u32,
    pub min_interpolation_offset: std::os::raw::c_float,
    pub max_interpolation_offset: std::os::raw::c_float,
    pub sub_pixel_interpolation_offset_bits: u32,
    pub max_framebuffer_width: u32,
    pub max_framebuffer_height: u32,
    pub max_framebuffer_layers: u32,
    pub framebuffer_color_sample_counts: crate::vk1_0::SampleCountFlags,
    pub framebuffer_depth_sample_counts: crate::vk1_0::SampleCountFlags,
    pub framebuffer_stencil_sample_counts: crate::vk1_0::SampleCountFlags,
    pub framebuffer_no_attachments_sample_counts: crate::vk1_0::SampleCountFlags,
    pub max_color_attachments: u32,
    pub sampled_image_color_sample_counts: crate::vk1_0::SampleCountFlags,
    pub sampled_image_integer_sample_counts: crate::vk1_0::SampleCountFlags,
    pub sampled_image_depth_sample_counts: crate::vk1_0::SampleCountFlags,
    pub sampled_image_stencil_sample_counts: crate::vk1_0::SampleCountFlags,
    pub storage_image_sample_counts: crate::vk1_0::SampleCountFlags,
    pub max_sample_mask_words: u32,
    pub timestamp_compute_and_graphics: crate::vk1_0::Bool32,
    pub timestamp_period: std::os::raw::c_float,
    pub max_clip_distances: u32,
    pub max_cull_distances: u32,
    pub max_combined_clip_and_cull_distances: u32,
    pub discrete_queue_priorities: u32,
    pub point_size_range: [std::os::raw::c_float; 2],
    pub line_width_range: [std::os::raw::c_float; 2],
    pub point_size_granularity: std::os::raw::c_float,
    pub line_width_granularity: std::os::raw::c_float,
    pub strict_lines: crate::vk1_0::Bool32,
    pub standard_sample_locations: crate::vk1_0::Bool32,
    pub optimal_buffer_copy_offset_alignment: crate::vk1_0::DeviceSize,
    pub optimal_buffer_copy_row_pitch_alignment: crate::vk1_0::DeviceSize,
    pub non_coherent_atom_size: crate::vk1_0::DeviceSize,
}
impl Default for PhysicalDeviceLimits {
    fn default() -> Self {
        Self {
            max_image_dimension1_d: Default::default(),
            max_image_dimension2_d: Default::default(),
            max_image_dimension3_d: Default::default(),
            max_image_dimension_cube: Default::default(),
            max_image_array_layers: Default::default(),
            max_texel_buffer_elements: Default::default(),
            max_uniform_buffer_range: Default::default(),
            max_storage_buffer_range: Default::default(),
            max_push_constants_size: Default::default(),
            max_memory_allocation_count: Default::default(),
            max_sampler_allocation_count: Default::default(),
            buffer_image_granularity: Default::default(),
            sparse_address_space_size: Default::default(),
            max_bound_descriptor_sets: Default::default(),
            max_per_stage_descriptor_samplers: Default::default(),
            max_per_stage_descriptor_uniform_buffers: Default::default(),
            max_per_stage_descriptor_storage_buffers: Default::default(),
            max_per_stage_descriptor_sampled_images: Default::default(),
            max_per_stage_descriptor_storage_images: Default::default(),
            max_per_stage_descriptor_input_attachments: Default::default(),
            max_per_stage_resources: Default::default(),
            max_descriptor_set_samplers: Default::default(),
            max_descriptor_set_uniform_buffers: Default::default(),
            max_descriptor_set_uniform_buffers_dynamic: Default::default(),
            max_descriptor_set_storage_buffers: Default::default(),
            max_descriptor_set_storage_buffers_dynamic: Default::default(),
            max_descriptor_set_sampled_images: Default::default(),
            max_descriptor_set_storage_images: Default::default(),
            max_descriptor_set_input_attachments: Default::default(),
            max_vertex_input_attributes: Default::default(),
            max_vertex_input_bindings: Default::default(),
            max_vertex_input_attribute_offset: Default::default(),
            max_vertex_input_binding_stride: Default::default(),
            max_vertex_output_components: Default::default(),
            max_tessellation_generation_level: Default::default(),
            max_tessellation_patch_size: Default::default(),
            max_tessellation_control_per_vertex_input_components: Default::default(),
            max_tessellation_control_per_vertex_output_components: Default::default(),
            max_tessellation_control_per_patch_output_components: Default::default(),
            max_tessellation_control_total_output_components: Default::default(),
            max_tessellation_evaluation_input_components: Default::default(),
            max_tessellation_evaluation_output_components: Default::default(),
            max_geometry_shader_invocations: Default::default(),
            max_geometry_input_components: Default::default(),
            max_geometry_output_components: Default::default(),
            max_geometry_output_vertices: Default::default(),
            max_geometry_total_output_components: Default::default(),
            max_fragment_input_components: Default::default(),
            max_fragment_output_attachments: Default::default(),
            max_fragment_dual_src_attachments: Default::default(),
            max_fragment_combined_output_resources: Default::default(),
            max_compute_shared_memory_size: Default::default(),
            max_compute_work_group_count: unsafe { std::mem::zeroed() },
            max_compute_work_group_invocations: Default::default(),
            max_compute_work_group_size: unsafe { std::mem::zeroed() },
            sub_pixel_precision_bits: Default::default(),
            sub_texel_precision_bits: Default::default(),
            mipmap_precision_bits: Default::default(),
            max_draw_indexed_index_value: Default::default(),
            max_draw_indirect_count: Default::default(),
            max_sampler_lod_bias: Default::default(),
            max_sampler_anisotropy: Default::default(),
            max_viewports: Default::default(),
            max_viewport_dimensions: unsafe { std::mem::zeroed() },
            viewport_bounds_range: unsafe { std::mem::zeroed() },
            viewport_sub_pixel_bits: Default::default(),
            min_memory_map_alignment: Default::default(),
            min_texel_buffer_offset_alignment: Default::default(),
            min_uniform_buffer_offset_alignment: Default::default(),
            min_storage_buffer_offset_alignment: Default::default(),
            min_texel_offset: Default::default(),
            max_texel_offset: Default::default(),
            min_texel_gather_offset: Default::default(),
            max_texel_gather_offset: Default::default(),
            min_interpolation_offset: Default::default(),
            max_interpolation_offset: Default::default(),
            sub_pixel_interpolation_offset_bits: Default::default(),
            max_framebuffer_width: Default::default(),
            max_framebuffer_height: Default::default(),
            max_framebuffer_layers: Default::default(),
            framebuffer_color_sample_counts: Default::default(),
            framebuffer_depth_sample_counts: Default::default(),
            framebuffer_stencil_sample_counts: Default::default(),
            framebuffer_no_attachments_sample_counts: Default::default(),
            max_color_attachments: Default::default(),
            sampled_image_color_sample_counts: Default::default(),
            sampled_image_integer_sample_counts: Default::default(),
            sampled_image_depth_sample_counts: Default::default(),
            sampled_image_stencil_sample_counts: Default::default(),
            storage_image_sample_counts: Default::default(),
            max_sample_mask_words: Default::default(),
            timestamp_compute_and_graphics: Default::default(),
            timestamp_period: Default::default(),
            max_clip_distances: Default::default(),
            max_cull_distances: Default::default(),
            max_combined_clip_and_cull_distances: Default::default(),
            discrete_queue_priorities: Default::default(),
            point_size_range: unsafe { std::mem::zeroed() },
            line_width_range: unsafe { std::mem::zeroed() },
            point_size_granularity: Default::default(),
            line_width_granularity: Default::default(),
            strict_lines: Default::default(),
            standard_sample_locations: Default::default(),
            optimal_buffer_copy_offset_alignment: Default::default(),
            optimal_buffer_copy_row_pitch_alignment: Default::default(),
            non_coherent_atom_size: Default::default(),
        }
    }
}
impl std::fmt::Debug for PhysicalDeviceLimits {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("PhysicalDeviceLimits")
            .field("max_image_dimension1_d", &self.max_image_dimension1_d)
            .field("max_image_dimension2_d", &self.max_image_dimension2_d)
            .field("max_image_dimension3_d", &self.max_image_dimension3_d)
            .field("max_image_dimension_cube", &self.max_image_dimension_cube)
            .field("max_image_array_layers", &self.max_image_array_layers)
            .field("max_texel_buffer_elements", &self.max_texel_buffer_elements)
            .field("max_uniform_buffer_range", &self.max_uniform_buffer_range)
            .field("max_storage_buffer_range", &self.max_storage_buffer_range)
            .field("max_push_constants_size", &self.max_push_constants_size)
            .field(
                "max_memory_allocation_count",
                &self.max_memory_allocation_count,
            )
            .field(
                "max_sampler_allocation_count",
                &self.max_sampler_allocation_count,
            )
            .field("buffer_image_granularity", &self.buffer_image_granularity)
            .field("sparse_address_space_size", &self.sparse_address_space_size)
            .field("max_bound_descriptor_sets", &self.max_bound_descriptor_sets)
            .field(
                "max_per_stage_descriptor_samplers",
                &self.max_per_stage_descriptor_samplers,
            )
            .field(
                "max_per_stage_descriptor_uniform_buffers",
                &self.max_per_stage_descriptor_uniform_buffers,
            )
            .field(
                "max_per_stage_descriptor_storage_buffers",
                &self.max_per_stage_descriptor_storage_buffers,
            )
            .field(
                "max_per_stage_descriptor_sampled_images",
                &self.max_per_stage_descriptor_sampled_images,
            )
            .field(
                "max_per_stage_descriptor_storage_images",
                &self.max_per_stage_descriptor_storage_images,
            )
            .field(
                "max_per_stage_descriptor_input_attachments",
                &self.max_per_stage_descriptor_input_attachments,
            )
            .field("max_per_stage_resources", &self.max_per_stage_resources)
            .field(
                "max_descriptor_set_samplers",
                &self.max_descriptor_set_samplers,
            )
            .field(
                "max_descriptor_set_uniform_buffers",
                &self.max_descriptor_set_uniform_buffers,
            )
            .field(
                "max_descriptor_set_uniform_buffers_dynamic",
                &self.max_descriptor_set_uniform_buffers_dynamic,
            )
            .field(
                "max_descriptor_set_storage_buffers",
                &self.max_descriptor_set_storage_buffers,
            )
            .field(
                "max_descriptor_set_storage_buffers_dynamic",
                &self.max_descriptor_set_storage_buffers_dynamic,
            )
            .field(
                "max_descriptor_set_sampled_images",
                &self.max_descriptor_set_sampled_images,
            )
            .field(
                "max_descriptor_set_storage_images",
                &self.max_descriptor_set_storage_images,
            )
            .field(
                "max_descriptor_set_input_attachments",
                &self.max_descriptor_set_input_attachments,
            )
            .field(
                "max_vertex_input_attributes",
                &self.max_vertex_input_attributes,
            )
            .field("max_vertex_input_bindings", &self.max_vertex_input_bindings)
            .field(
                "max_vertex_input_attribute_offset",
                &self.max_vertex_input_attribute_offset,
            )
            .field(
                "max_vertex_input_binding_stride",
                &self.max_vertex_input_binding_stride,
            )
            .field(
                "max_vertex_output_components",
                &self.max_vertex_output_components,
            )
            .field(
                "max_tessellation_generation_level",
                &self.max_tessellation_generation_level,
            )
            .field(
                "max_tessellation_patch_size",
                &self.max_tessellation_patch_size,
            )
            .field(
                "max_tessellation_control_per_vertex_input_components",
                &self.max_tessellation_control_per_vertex_input_components,
            )
            .field(
                "max_tessellation_control_per_vertex_output_components",
                &self.max_tessellation_control_per_vertex_output_components,
            )
            .field(
                "max_tessellation_control_per_patch_output_components",
                &self.max_tessellation_control_per_patch_output_components,
            )
            .field(
                "max_tessellation_control_total_output_components",
                &self.max_tessellation_control_total_output_components,
            )
            .field(
                "max_tessellation_evaluation_input_components",
                &self.max_tessellation_evaluation_input_components,
            )
            .field(
                "max_tessellation_evaluation_output_components",
                &self.max_tessellation_evaluation_output_components,
            )
            .field(
                "max_geometry_shader_invocations",
                &self.max_geometry_shader_invocations,
            )
            .field(
                "max_geometry_input_components",
                &self.max_geometry_input_components,
            )
            .field(
                "max_geometry_output_components",
                &self.max_geometry_output_components,
            )
            .field(
                "max_geometry_output_vertices",
                &self.max_geometry_output_vertices,
            )
            .field(
                "max_geometry_total_output_components",
                &self.max_geometry_total_output_components,
            )
            .field(
                "max_fragment_input_components",
                &self.max_fragment_input_components,
            )
            .field(
                "max_fragment_output_attachments",
                &self.max_fragment_output_attachments,
            )
            .field(
                "max_fragment_dual_src_attachments",
                &self.max_fragment_dual_src_attachments,
            )
            .field(
                "max_fragment_combined_output_resources",
                &self.max_fragment_combined_output_resources,
            )
            .field(
                "max_compute_shared_memory_size",
                &self.max_compute_shared_memory_size,
            )
            .field(
                "max_compute_work_group_count",
                &self.max_compute_work_group_count,
            )
            .field(
                "max_compute_work_group_invocations",
                &self.max_compute_work_group_invocations,
            )
            .field(
                "max_compute_work_group_size",
                &self.max_compute_work_group_size,
            )
            .field("sub_pixel_precision_bits", &self.sub_pixel_precision_bits)
            .field("sub_texel_precision_bits", &self.sub_texel_precision_bits)
            .field("mipmap_precision_bits", &self.mipmap_precision_bits)
            .field(
                "max_draw_indexed_index_value",
                &self.max_draw_indexed_index_value,
            )
            .field("max_draw_indirect_count", &self.max_draw_indirect_count)
            .field("max_sampler_lod_bias", &self.max_sampler_lod_bias)
            .field("max_sampler_anisotropy", &self.max_sampler_anisotropy)
            .field("max_viewports", &self.max_viewports)
            .field("max_viewport_dimensions", &self.max_viewport_dimensions)
            .field("viewport_bounds_range", &self.viewport_bounds_range)
            .field("viewport_sub_pixel_bits", &self.viewport_sub_pixel_bits)
            .field("min_memory_map_alignment", &self.min_memory_map_alignment)
            .field(
                "min_texel_buffer_offset_alignment",
                &self.min_texel_buffer_offset_alignment,
            )
            .field(
                "min_uniform_buffer_offset_alignment",
                &self.min_uniform_buffer_offset_alignment,
            )
            .field(
                "min_storage_buffer_offset_alignment",
                &self.min_storage_buffer_offset_alignment,
            )
            .field("min_texel_offset", &self.min_texel_offset)
            .field("max_texel_offset", &self.max_texel_offset)
            .field("min_texel_gather_offset", &self.min_texel_gather_offset)
            .field("max_texel_gather_offset", &self.max_texel_gather_offset)
            .field("min_interpolation_offset", &self.min_interpolation_offset)
            .field("max_interpolation_offset", &self.max_interpolation_offset)
            .field(
                "sub_pixel_interpolation_offset_bits",
                &self.sub_pixel_interpolation_offset_bits,
            )
            .field("max_framebuffer_width", &self.max_framebuffer_width)
            .field("max_framebuffer_height", &self.max_framebuffer_height)
            .field("max_framebuffer_layers", &self.max_framebuffer_layers)
            .field(
                "framebuffer_color_sample_counts",
                &self.framebuffer_color_sample_counts,
            )
            .field(
                "framebuffer_depth_sample_counts",
                &self.framebuffer_depth_sample_counts,
            )
            .field(
                "framebuffer_stencil_sample_counts",
                &self.framebuffer_stencil_sample_counts,
            )
            .field(
                "framebuffer_no_attachments_sample_counts",
                &self.framebuffer_no_attachments_sample_counts,
            )
            .field("max_color_attachments", &self.max_color_attachments)
            .field(
                "sampled_image_color_sample_counts",
                &self.sampled_image_color_sample_counts,
            )
            .field(
                "sampled_image_integer_sample_counts",
                &self.sampled_image_integer_sample_counts,
            )
            .field(
                "sampled_image_depth_sample_counts",
                &self.sampled_image_depth_sample_counts,
            )
            .field(
                "sampled_image_stencil_sample_counts",
                &self.sampled_image_stencil_sample_counts,
            )
            .field(
                "storage_image_sample_counts",
                &self.storage_image_sample_counts,
            )
            .field("max_sample_mask_words", &self.max_sample_mask_words)
            .field(
                "timestamp_compute_and_graphics",
                &(self.timestamp_compute_and_graphics != 0),
            )
            .field("timestamp_period", &self.timestamp_period)
            .field("max_clip_distances", &self.max_clip_distances)
            .field("max_cull_distances", &self.max_cull_distances)
            .field(
                "max_combined_clip_and_cull_distances",
                &self.max_combined_clip_and_cull_distances,
            )
            .field("discrete_queue_priorities", &self.discrete_queue_priorities)
            .field("point_size_range", &self.point_size_range)
            .field("line_width_range", &self.line_width_range)
            .field("point_size_granularity", &self.point_size_granularity)
            .field("line_width_granularity", &self.line_width_granularity)
            .field("strict_lines", &(self.strict_lines != 0))
            .field(
                "standard_sample_locations",
                &(self.standard_sample_locations != 0),
            )
            .field(
                "optimal_buffer_copy_offset_alignment",
                &self.optimal_buffer_copy_offset_alignment,
            )
            .field(
                "optimal_buffer_copy_row_pitch_alignment",
                &self.optimal_buffer_copy_row_pitch_alignment,
            )
            .field("non_coherent_atom_size", &self.non_coherent_atom_size)
            .finish()
    }
}
impl PhysicalDeviceLimits {
    #[inline]
    pub fn into_builder<'a>(self) -> PhysicalDeviceLimitsBuilder<'a> {
        PhysicalDeviceLimitsBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceLimits.html) · Builder of [`PhysicalDeviceLimits`]"]
#[repr(transparent)]
pub struct PhysicalDeviceLimitsBuilder<'a>(PhysicalDeviceLimits, std::marker::PhantomData<&'a ()>);
impl<'a> PhysicalDeviceLimitsBuilder<'a> {
    #[inline]
    pub fn new() -> PhysicalDeviceLimitsBuilder<'a> {
        PhysicalDeviceLimitsBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn max_image_dimension1_d(mut self, max_image_dimension1_d: u32) -> Self {
        self.0.max_image_dimension1_d = max_image_dimension1_d as _;
        self
    }
    #[inline]
    pub fn max_image_dimension2_d(mut self, max_image_dimension2_d: u32) -> Self {
        self.0.max_image_dimension2_d = max_image_dimension2_d as _;
        self
    }
    #[inline]
    pub fn max_image_dimension3_d(mut self, max_image_dimension3_d: u32) -> Self {
        self.0.max_image_dimension3_d = max_image_dimension3_d as _;
        self
    }
    #[inline]
    pub fn max_image_dimension_cube(mut self, max_image_dimension_cube: u32) -> Self {
        self.0.max_image_dimension_cube = max_image_dimension_cube as _;
        self
    }
    #[inline]
    pub fn max_image_array_layers(mut self, max_image_array_layers: u32) -> Self {
        self.0.max_image_array_layers = max_image_array_layers as _;
        self
    }
    #[inline]
    pub fn max_texel_buffer_elements(mut self, max_texel_buffer_elements: u32) -> Self {
        self.0.max_texel_buffer_elements = max_texel_buffer_elements as _;
        self
    }
    #[inline]
    pub fn max_uniform_buffer_range(mut self, max_uniform_buffer_range: u32) -> Self {
        self.0.max_uniform_buffer_range = max_uniform_buffer_range as _;
        self
    }
    #[inline]
    pub fn max_storage_buffer_range(mut self, max_storage_buffer_range: u32) -> Self {
        self.0.max_storage_buffer_range = max_storage_buffer_range as _;
        self
    }
    #[inline]
    pub fn max_push_constants_size(mut self, max_push_constants_size: u32) -> Self {
        self.0.max_push_constants_size = max_push_constants_size as _;
        self
    }
    #[inline]
    pub fn max_memory_allocation_count(mut self, max_memory_allocation_count: u32) -> Self {
        self.0.max_memory_allocation_count = max_memory_allocation_count as _;
        self
    }
    #[inline]
    pub fn max_sampler_allocation_count(mut self, max_sampler_allocation_count: u32) -> Self {
        self.0.max_sampler_allocation_count = max_sampler_allocation_count as _;
        self
    }
    #[inline]
    pub fn buffer_image_granularity(
        mut self,
        buffer_image_granularity: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.buffer_image_granularity = buffer_image_granularity as _;
        self
    }
    #[inline]
    pub fn sparse_address_space_size(
        mut self,
        sparse_address_space_size: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.sparse_address_space_size = sparse_address_space_size as _;
        self
    }
    #[inline]
    pub fn max_bound_descriptor_sets(mut self, max_bound_descriptor_sets: u32) -> Self {
        self.0.max_bound_descriptor_sets = max_bound_descriptor_sets as _;
        self
    }
    #[inline]
    pub fn max_per_stage_descriptor_samplers(
        mut self,
        max_per_stage_descriptor_samplers: u32,
    ) -> Self {
        self.0.max_per_stage_descriptor_samplers = max_per_stage_descriptor_samplers as _;
        self
    }
    #[inline]
    pub fn max_per_stage_descriptor_uniform_buffers(
        mut self,
        max_per_stage_descriptor_uniform_buffers: u32,
    ) -> Self {
        self.0.max_per_stage_descriptor_uniform_buffers =
            max_per_stage_descriptor_uniform_buffers as _;
        self
    }
    #[inline]
    pub fn max_per_stage_descriptor_storage_buffers(
        mut self,
        max_per_stage_descriptor_storage_buffers: u32,
    ) -> Self {
        self.0.max_per_stage_descriptor_storage_buffers =
            max_per_stage_descriptor_storage_buffers as _;
        self
    }
    #[inline]
    pub fn max_per_stage_descriptor_sampled_images(
        mut self,
        max_per_stage_descriptor_sampled_images: u32,
    ) -> Self {
        self.0.max_per_stage_descriptor_sampled_images =
            max_per_stage_descriptor_sampled_images as _;
        self
    }
    #[inline]
    pub fn max_per_stage_descriptor_storage_images(
        mut self,
        max_per_stage_descriptor_storage_images: u32,
    ) -> Self {
        self.0.max_per_stage_descriptor_storage_images =
            max_per_stage_descriptor_storage_images as _;
        self
    }
    #[inline]
    pub fn max_per_stage_descriptor_input_attachments(
        mut self,
        max_per_stage_descriptor_input_attachments: u32,
    ) -> Self {
        self.0.max_per_stage_descriptor_input_attachments =
            max_per_stage_descriptor_input_attachments as _;
        self
    }
    #[inline]
    pub fn max_per_stage_resources(mut self, max_per_stage_resources: u32) -> Self {
        self.0.max_per_stage_resources = max_per_stage_resources as _;
        self
    }
    #[inline]
    pub fn max_descriptor_set_samplers(mut self, max_descriptor_set_samplers: u32) -> Self {
        self.0.max_descriptor_set_samplers = max_descriptor_set_samplers as _;
        self
    }
    #[inline]
    pub fn max_descriptor_set_uniform_buffers(
        mut self,
        max_descriptor_set_uniform_buffers: u32,
    ) -> Self {
        self.0.max_descriptor_set_uniform_buffers = max_descriptor_set_uniform_buffers as _;
        self
    }
    #[inline]
    pub fn max_descriptor_set_uniform_buffers_dynamic(
        mut self,
        max_descriptor_set_uniform_buffers_dynamic: u32,
    ) -> Self {
        self.0.max_descriptor_set_uniform_buffers_dynamic =
            max_descriptor_set_uniform_buffers_dynamic as _;
        self
    }
    #[inline]
    pub fn max_descriptor_set_storage_buffers(
        mut self,
        max_descriptor_set_storage_buffers: u32,
    ) -> Self {
        self.0.max_descriptor_set_storage_buffers = max_descriptor_set_storage_buffers as _;
        self
    }
    #[inline]
    pub fn max_descriptor_set_storage_buffers_dynamic(
        mut self,
        max_descriptor_set_storage_buffers_dynamic: u32,
    ) -> Self {
        self.0.max_descriptor_set_storage_buffers_dynamic =
            max_descriptor_set_storage_buffers_dynamic as _;
        self
    }
    #[inline]
    pub fn max_descriptor_set_sampled_images(
        mut self,
        max_descriptor_set_sampled_images: u32,
    ) -> Self {
        self.0.max_descriptor_set_sampled_images = max_descriptor_set_sampled_images as _;
        self
    }
    #[inline]
    pub fn max_descriptor_set_storage_images(
        mut self,
        max_descriptor_set_storage_images: u32,
    ) -> Self {
        self.0.max_descriptor_set_storage_images = max_descriptor_set_storage_images as _;
        self
    }
    #[inline]
    pub fn max_descriptor_set_input_attachments(
        mut self,
        max_descriptor_set_input_attachments: u32,
    ) -> Self {
        self.0.max_descriptor_set_input_attachments = max_descriptor_set_input_attachments as _;
        self
    }
    #[inline]
    pub fn max_vertex_input_attributes(mut self, max_vertex_input_attributes: u32) -> Self {
        self.0.max_vertex_input_attributes = max_vertex_input_attributes as _;
        self
    }
    #[inline]
    pub fn max_vertex_input_bindings(mut self, max_vertex_input_bindings: u32) -> Self {
        self.0.max_vertex_input_bindings = max_vertex_input_bindings as _;
        self
    }
    #[inline]
    pub fn max_vertex_input_attribute_offset(
        mut self,
        max_vertex_input_attribute_offset: u32,
    ) -> Self {
        self.0.max_vertex_input_attribute_offset = max_vertex_input_attribute_offset as _;
        self
    }
    #[inline]
    pub fn max_vertex_input_binding_stride(mut self, max_vertex_input_binding_stride: u32) -> Self {
        self.0.max_vertex_input_binding_stride = max_vertex_input_binding_stride as _;
        self
    }
    #[inline]
    pub fn max_vertex_output_components(mut self, max_vertex_output_components: u32) -> Self {
        self.0.max_vertex_output_components = max_vertex_output_components as _;
        self
    }
    #[inline]
    pub fn max_tessellation_generation_level(
        mut self,
        max_tessellation_generation_level: u32,
    ) -> Self {
        self.0.max_tessellation_generation_level = max_tessellation_generation_level as _;
        self
    }
    #[inline]
    pub fn max_tessellation_patch_size(mut self, max_tessellation_patch_size: u32) -> Self {
        self.0.max_tessellation_patch_size = max_tessellation_patch_size as _;
        self
    }
    #[inline]
    pub fn max_tessellation_control_per_vertex_input_components(
        mut self,
        max_tessellation_control_per_vertex_input_components: u32,
    ) -> Self {
        self.0.max_tessellation_control_per_vertex_input_components =
            max_tessellation_control_per_vertex_input_components as _;
        self
    }
    #[inline]
    pub fn max_tessellation_control_per_vertex_output_components(
        mut self,
        max_tessellation_control_per_vertex_output_components: u32,
    ) -> Self {
        self.0.max_tessellation_control_per_vertex_output_components =
            max_tessellation_control_per_vertex_output_components as _;
        self
    }
    #[inline]
    pub fn max_tessellation_control_per_patch_output_components(
        mut self,
        max_tessellation_control_per_patch_output_components: u32,
    ) -> Self {
        self.0.max_tessellation_control_per_patch_output_components =
            max_tessellation_control_per_patch_output_components as _;
        self
    }
    #[inline]
    pub fn max_tessellation_control_total_output_components(
        mut self,
        max_tessellation_control_total_output_components: u32,
    ) -> Self {
        self.0.max_tessellation_control_total_output_components =
            max_tessellation_control_total_output_components as _;
        self
    }
    #[inline]
    pub fn max_tessellation_evaluation_input_components(
        mut self,
        max_tessellation_evaluation_input_components: u32,
    ) -> Self {
        self.0.max_tessellation_evaluation_input_components =
            max_tessellation_evaluation_input_components as _;
        self
    }
    #[inline]
    pub fn max_tessellation_evaluation_output_components(
        mut self,
        max_tessellation_evaluation_output_components: u32,
    ) -> Self {
        self.0.max_tessellation_evaluation_output_components =
            max_tessellation_evaluation_output_components as _;
        self
    }
    #[inline]
    pub fn max_geometry_shader_invocations(mut self, max_geometry_shader_invocations: u32) -> Self {
        self.0.max_geometry_shader_invocations = max_geometry_shader_invocations as _;
        self
    }
    #[inline]
    pub fn max_geometry_input_components(mut self, max_geometry_input_components: u32) -> Self {
        self.0.max_geometry_input_components = max_geometry_input_components as _;
        self
    }
    #[inline]
    pub fn max_geometry_output_components(mut self, max_geometry_output_components: u32) -> Self {
        self.0.max_geometry_output_components = max_geometry_output_components as _;
        self
    }
    #[inline]
    pub fn max_geometry_output_vertices(mut self, max_geometry_output_vertices: u32) -> Self {
        self.0.max_geometry_output_vertices = max_geometry_output_vertices as _;
        self
    }
    #[inline]
    pub fn max_geometry_total_output_components(
        mut self,
        max_geometry_total_output_components: u32,
    ) -> Self {
        self.0.max_geometry_total_output_components = max_geometry_total_output_components as _;
        self
    }
    #[inline]
    pub fn max_fragment_input_components(mut self, max_fragment_input_components: u32) -> Self {
        self.0.max_fragment_input_components = max_fragment_input_components as _;
        self
    }
    #[inline]
    pub fn max_fragment_output_attachments(mut self, max_fragment_output_attachments: u32) -> Self {
        self.0.max_fragment_output_attachments = max_fragment_output_attachments as _;
        self
    }
    #[inline]
    pub fn max_fragment_dual_src_attachments(
        mut self,
        max_fragment_dual_src_attachments: u32,
    ) -> Self {
        self.0.max_fragment_dual_src_attachments = max_fragment_dual_src_attachments as _;
        self
    }
    #[inline]
    pub fn max_fragment_combined_output_resources(
        mut self,
        max_fragment_combined_output_resources: u32,
    ) -> Self {
        self.0.max_fragment_combined_output_resources = max_fragment_combined_output_resources as _;
        self
    }
    #[inline]
    pub fn max_compute_shared_memory_size(mut self, max_compute_shared_memory_size: u32) -> Self {
        self.0.max_compute_shared_memory_size = max_compute_shared_memory_size as _;
        self
    }
    #[inline]
    pub fn max_compute_work_group_count(mut self, max_compute_work_group_count: [u32; 3]) -> Self {
        self.0.max_compute_work_group_count = max_compute_work_group_count as _;
        self
    }
    #[inline]
    pub fn max_compute_work_group_invocations(
        mut self,
        max_compute_work_group_invocations: u32,
    ) -> Self {
        self.0.max_compute_work_group_invocations = max_compute_work_group_invocations as _;
        self
    }
    #[inline]
    pub fn max_compute_work_group_size(mut self, max_compute_work_group_size: [u32; 3]) -> Self {
        self.0.max_compute_work_group_size = max_compute_work_group_size as _;
        self
    }
    #[inline]
    pub fn sub_pixel_precision_bits(mut self, sub_pixel_precision_bits: u32) -> Self {
        self.0.sub_pixel_precision_bits = sub_pixel_precision_bits as _;
        self
    }
    #[inline]
    pub fn sub_texel_precision_bits(mut self, sub_texel_precision_bits: u32) -> Self {
        self.0.sub_texel_precision_bits = sub_texel_precision_bits as _;
        self
    }
    #[inline]
    pub fn mipmap_precision_bits(mut self, mipmap_precision_bits: u32) -> Self {
        self.0.mipmap_precision_bits = mipmap_precision_bits as _;
        self
    }
    #[inline]
    pub fn max_draw_indexed_index_value(mut self, max_draw_indexed_index_value: u32) -> Self {
        self.0.max_draw_indexed_index_value = max_draw_indexed_index_value as _;
        self
    }
    #[inline]
    pub fn max_draw_indirect_count(mut self, max_draw_indirect_count: u32) -> Self {
        self.0.max_draw_indirect_count = max_draw_indirect_count as _;
        self
    }
    #[inline]
    pub fn max_sampler_lod_bias(mut self, max_sampler_lod_bias: std::os::raw::c_float) -> Self {
        self.0.max_sampler_lod_bias = max_sampler_lod_bias as _;
        self
    }
    #[inline]
    pub fn max_sampler_anisotropy(mut self, max_sampler_anisotropy: std::os::raw::c_float) -> Self {
        self.0.max_sampler_anisotropy = max_sampler_anisotropy as _;
        self
    }
    #[inline]
    pub fn max_viewports(mut self, max_viewports: u32) -> Self {
        self.0.max_viewports = max_viewports as _;
        self
    }
    #[inline]
    pub fn max_viewport_dimensions(mut self, max_viewport_dimensions: [u32; 2]) -> Self {
        self.0.max_viewport_dimensions = max_viewport_dimensions as _;
        self
    }
    #[inline]
    pub fn viewport_bounds_range(
        mut self,
        viewport_bounds_range: [std::os::raw::c_float; 2],
    ) -> Self {
        self.0.viewport_bounds_range = viewport_bounds_range as _;
        self
    }
    #[inline]
    pub fn viewport_sub_pixel_bits(mut self, viewport_sub_pixel_bits: u32) -> Self {
        self.0.viewport_sub_pixel_bits = viewport_sub_pixel_bits as _;
        self
    }
    #[inline]
    pub fn min_memory_map_alignment(mut self, min_memory_map_alignment: usize) -> Self {
        self.0.min_memory_map_alignment = min_memory_map_alignment as _;
        self
    }
    #[inline]
    pub fn min_texel_buffer_offset_alignment(
        mut self,
        min_texel_buffer_offset_alignment: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.min_texel_buffer_offset_alignment = min_texel_buffer_offset_alignment as _;
        self
    }
    #[inline]
    pub fn min_uniform_buffer_offset_alignment(
        mut self,
        min_uniform_buffer_offset_alignment: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.min_uniform_buffer_offset_alignment = min_uniform_buffer_offset_alignment as _;
        self
    }
    #[inline]
    pub fn min_storage_buffer_offset_alignment(
        mut self,
        min_storage_buffer_offset_alignment: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.min_storage_buffer_offset_alignment = min_storage_buffer_offset_alignment as _;
        self
    }
    #[inline]
    pub fn min_texel_offset(mut self, min_texel_offset: i32) -> Self {
        self.0.min_texel_offset = min_texel_offset as _;
        self
    }
    #[inline]
    pub fn max_texel_offset(mut self, max_texel_offset: u32) -> Self {
        self.0.max_texel_offset = max_texel_offset as _;
        self
    }
    #[inline]
    pub fn min_texel_gather_offset(mut self, min_texel_gather_offset: i32) -> Self {
        self.0.min_texel_gather_offset = min_texel_gather_offset as _;
        self
    }
    #[inline]
    pub fn max_texel_gather_offset(mut self, max_texel_gather_offset: u32) -> Self {
        self.0.max_texel_gather_offset = max_texel_gather_offset as _;
        self
    }
    #[inline]
    pub fn min_interpolation_offset(
        mut self,
        min_interpolation_offset: std::os::raw::c_float,
    ) -> Self {
        self.0.min_interpolation_offset = min_interpolation_offset as _;
        self
    }
    #[inline]
    pub fn max_interpolation_offset(
        mut self,
        max_interpolation_offset: std::os::raw::c_float,
    ) -> Self {
        self.0.max_interpolation_offset = max_interpolation_offset as _;
        self
    }
    #[inline]
    pub fn sub_pixel_interpolation_offset_bits(
        mut self,
        sub_pixel_interpolation_offset_bits: u32,
    ) -> Self {
        self.0.sub_pixel_interpolation_offset_bits = sub_pixel_interpolation_offset_bits as _;
        self
    }
    #[inline]
    pub fn max_framebuffer_width(mut self, max_framebuffer_width: u32) -> Self {
        self.0.max_framebuffer_width = max_framebuffer_width as _;
        self
    }
    #[inline]
    pub fn max_framebuffer_height(mut self, max_framebuffer_height: u32) -> Self {
        self.0.max_framebuffer_height = max_framebuffer_height as _;
        self
    }
    #[inline]
    pub fn max_framebuffer_layers(mut self, max_framebuffer_layers: u32) -> Self {
        self.0.max_framebuffer_layers = max_framebuffer_layers as _;
        self
    }
    #[inline]
    pub fn framebuffer_color_sample_counts(
        mut self,
        framebuffer_color_sample_counts: crate::vk1_0::SampleCountFlags,
    ) -> Self {
        self.0.framebuffer_color_sample_counts = framebuffer_color_sample_counts as _;
        self
    }
    #[inline]
    pub fn framebuffer_depth_sample_counts(
        mut self,
        framebuffer_depth_sample_counts: crate::vk1_0::SampleCountFlags,
    ) -> Self {
        self.0.framebuffer_depth_sample_counts = framebuffer_depth_sample_counts as _;
        self
    }
    #[inline]
    pub fn framebuffer_stencil_sample_counts(
        mut self,
        framebuffer_stencil_sample_counts: crate::vk1_0::SampleCountFlags,
    ) -> Self {
        self.0.framebuffer_stencil_sample_counts = framebuffer_stencil_sample_counts as _;
        self
    }
    #[inline]
    pub fn framebuffer_no_attachments_sample_counts(
        mut self,
        framebuffer_no_attachments_sample_counts: crate::vk1_0::SampleCountFlags,
    ) -> Self {
        self.0.framebuffer_no_attachments_sample_counts =
            framebuffer_no_attachments_sample_counts as _;
        self
    }
    #[inline]
    pub fn max_color_attachments(mut self, max_color_attachments: u32) -> Self {
        self.0.max_color_attachments = max_color_attachments as _;
        self
    }
    #[inline]
    pub fn sampled_image_color_sample_counts(
        mut self,
        sampled_image_color_sample_counts: crate::vk1_0::SampleCountFlags,
    ) -> Self {
        self.0.sampled_image_color_sample_counts = sampled_image_color_sample_counts as _;
        self
    }
    #[inline]
    pub fn sampled_image_integer_sample_counts(
        mut self,
        sampled_image_integer_sample_counts: crate::vk1_0::SampleCountFlags,
    ) -> Self {
        self.0.sampled_image_integer_sample_counts = sampled_image_integer_sample_counts as _;
        self
    }
    #[inline]
    pub fn sampled_image_depth_sample_counts(
        mut self,
        sampled_image_depth_sample_counts: crate::vk1_0::SampleCountFlags,
    ) -> Self {
        self.0.sampled_image_depth_sample_counts = sampled_image_depth_sample_counts as _;
        self
    }
    #[inline]
    pub fn sampled_image_stencil_sample_counts(
        mut self,
        sampled_image_stencil_sample_counts: crate::vk1_0::SampleCountFlags,
    ) -> Self {
        self.0.sampled_image_stencil_sample_counts = sampled_image_stencil_sample_counts as _;
        self
    }
    #[inline]
    pub fn storage_image_sample_counts(
        mut self,
        storage_image_sample_counts: crate::vk1_0::SampleCountFlags,
    ) -> Self {
        self.0.storage_image_sample_counts = storage_image_sample_counts as _;
        self
    }
    #[inline]
    pub fn max_sample_mask_words(mut self, max_sample_mask_words: u32) -> Self {
        self.0.max_sample_mask_words = max_sample_mask_words as _;
        self
    }
    #[inline]
    pub fn timestamp_compute_and_graphics(mut self, timestamp_compute_and_graphics: bool) -> Self {
        self.0.timestamp_compute_and_graphics = timestamp_compute_and_graphics as _;
        self
    }
    #[inline]
    pub fn timestamp_period(mut self, timestamp_period: std::os::raw::c_float) -> Self {
        self.0.timestamp_period = timestamp_period as _;
        self
    }
    #[inline]
    pub fn max_clip_distances(mut self, max_clip_distances: u32) -> Self {
        self.0.max_clip_distances = max_clip_distances as _;
        self
    }
    #[inline]
    pub fn max_cull_distances(mut self, max_cull_distances: u32) -> Self {
        self.0.max_cull_distances = max_cull_distances as _;
        self
    }
    #[inline]
    pub fn max_combined_clip_and_cull_distances(
        mut self,
        max_combined_clip_and_cull_distances: u32,
    ) -> Self {
        self.0.max_combined_clip_and_cull_distances = max_combined_clip_and_cull_distances as _;
        self
    }
    #[inline]
    pub fn discrete_queue_priorities(mut self, discrete_queue_priorities: u32) -> Self {
        self.0.discrete_queue_priorities = discrete_queue_priorities as _;
        self
    }
    #[inline]
    pub fn point_size_range(mut self, point_size_range: [std::os::raw::c_float; 2]) -> Self {
        self.0.point_size_range = point_size_range as _;
        self
    }
    #[inline]
    pub fn line_width_range(mut self, line_width_range: [std::os::raw::c_float; 2]) -> Self {
        self.0.line_width_range = line_width_range as _;
        self
    }
    #[inline]
    pub fn point_size_granularity(mut self, point_size_granularity: std::os::raw::c_float) -> Self {
        self.0.point_size_granularity = point_size_granularity as _;
        self
    }
    #[inline]
    pub fn line_width_granularity(mut self, line_width_granularity: std::os::raw::c_float) -> Self {
        self.0.line_width_granularity = line_width_granularity as _;
        self
    }
    #[inline]
    pub fn strict_lines(mut self, strict_lines: bool) -> Self {
        self.0.strict_lines = strict_lines as _;
        self
    }
    #[inline]
    pub fn standard_sample_locations(mut self, standard_sample_locations: bool) -> Self {
        self.0.standard_sample_locations = standard_sample_locations as _;
        self
    }
    #[inline]
    pub fn optimal_buffer_copy_offset_alignment(
        mut self,
        optimal_buffer_copy_offset_alignment: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.optimal_buffer_copy_offset_alignment = optimal_buffer_copy_offset_alignment as _;
        self
    }
    #[inline]
    pub fn optimal_buffer_copy_row_pitch_alignment(
        mut self,
        optimal_buffer_copy_row_pitch_alignment: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.optimal_buffer_copy_row_pitch_alignment =
            optimal_buffer_copy_row_pitch_alignment as _;
        self
    }
    #[inline]
    pub fn non_coherent_atom_size(
        mut self,
        non_coherent_atom_size: crate::vk1_0::DeviceSize,
    ) -> Self {
        self.0.non_coherent_atom_size = non_coherent_atom_size as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> PhysicalDeviceLimits {
        self.0
    }
}
impl<'a> std::default::Default for PhysicalDeviceLimitsBuilder<'a> {
    fn default() -> PhysicalDeviceLimitsBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for PhysicalDeviceLimitsBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for PhysicalDeviceLimitsBuilder<'a> {
    type Target = PhysicalDeviceLimits;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for PhysicalDeviceLimitsBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSemaphoreCreateInfo.html) · Structure"]
#[doc(alias = "VkSemaphoreCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SemaphoreCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::SemaphoreCreateFlags,
}
impl Default for SemaphoreCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::SEMAPHORE_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
        }
    }
}
impl std::fmt::Debug for SemaphoreCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SemaphoreCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .finish()
    }
}
impl SemaphoreCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> SemaphoreCreateInfoBuilder<'a> {
        SemaphoreCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExportSemaphoreCreateInfo>
    for SemaphoreCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ExportSemaphoreCreateInfoBuilder<'_>>
    for SemaphoreCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_semaphore_win32::ExportSemaphoreWin32HandleInfoKHR,
    > for SemaphoreCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_semaphore_win32::ExportSemaphoreWin32HandleInfoKHRBuilder<
            '_,
        >,
    > for SemaphoreCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::SemaphoreTypeCreateInfo>
    for SemaphoreCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::SemaphoreTypeCreateInfoBuilder<'_>>
    for SemaphoreCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSemaphoreCreateInfo.html) · Builder of [`SemaphoreCreateInfo`]"]
#[repr(transparent)]
pub struct SemaphoreCreateInfoBuilder<'a>(SemaphoreCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> SemaphoreCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> SemaphoreCreateInfoBuilder<'a> {
        SemaphoreCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::SemaphoreCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SemaphoreCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for SemaphoreCreateInfoBuilder<'a> {
    fn default() -> SemaphoreCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SemaphoreCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SemaphoreCreateInfoBuilder<'a> {
    type Target = SemaphoreCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SemaphoreCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryPoolCreateInfo.html) · Structure"]
#[doc(alias = "VkQueryPoolCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct QueryPoolCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::QueryPoolCreateFlags,
    pub query_type: crate::vk1_0::QueryType,
    pub query_count: u32,
    pub pipeline_statistics: crate::vk1_0::QueryPipelineStatisticFlags,
}
impl Default for QueryPoolCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::QUERY_POOL_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            query_type: Default::default(),
            query_count: Default::default(),
            pipeline_statistics: Default::default(),
        }
    }
}
impl std::fmt::Debug for QueryPoolCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("QueryPoolCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("query_type", &self.query_type)
            .field("query_count", &self.query_count)
            .field("pipeline_statistics", &self.pipeline_statistics)
            .finish()
    }
}
impl QueryPoolCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> QueryPoolCreateInfoBuilder<'a> {
        QueryPoolCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_performance_query::QueryPoolPerformanceCreateInfoKHR,
    > for QueryPoolCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_performance_query::QueryPoolPerformanceCreateInfoKHRBuilder<'_>,
    > for QueryPoolCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::intel_performance_query::QueryPoolPerformanceQueryCreateInfoINTEL,
    > for QueryPoolCreateInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::intel_performance_query::QueryPoolPerformanceQueryCreateInfoINTELBuilder<
            '_,
        >,
    > for QueryPoolCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkQueryPoolCreateInfo.html) · Builder of [`QueryPoolCreateInfo`]"]
#[repr(transparent)]
pub struct QueryPoolCreateInfoBuilder<'a>(QueryPoolCreateInfo, std::marker::PhantomData<&'a ()>);
impl<'a> QueryPoolCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> QueryPoolCreateInfoBuilder<'a> {
        QueryPoolCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::QueryPoolCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn query_type(mut self, query_type: crate::vk1_0::QueryType) -> Self {
        self.0.query_type = query_type as _;
        self
    }
    #[inline]
    pub fn query_count(mut self, query_count: u32) -> Self {
        self.0.query_count = query_count as _;
        self
    }
    #[inline]
    pub fn pipeline_statistics(
        mut self,
        pipeline_statistics: crate::vk1_0::QueryPipelineStatisticFlags,
    ) -> Self {
        self.0.pipeline_statistics = pipeline_statistics as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> QueryPoolCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for QueryPoolCreateInfoBuilder<'a> {
    fn default() -> QueryPoolCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for QueryPoolCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for QueryPoolCreateInfoBuilder<'a> {
    type Target = QueryPoolCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for QueryPoolCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFramebufferCreateInfo.html) · Structure"]
#[doc(alias = "VkFramebufferCreateInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct FramebufferCreateInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub flags: crate::vk1_0::FramebufferCreateFlags,
    pub render_pass: crate::vk1_0::RenderPass,
    pub attachment_count: u32,
    pub p_attachments: *const crate::vk1_0::ImageView,
    pub width: u32,
    pub height: u32,
    pub layers: u32,
}
impl Default for FramebufferCreateInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::FRAMEBUFFER_CREATE_INFO,
            p_next: std::ptr::null(),
            flags: Default::default(),
            render_pass: Default::default(),
            attachment_count: Default::default(),
            p_attachments: std::ptr::null(),
            width: Default::default(),
            height: Default::default(),
            layers: Default::default(),
        }
    }
}
impl std::fmt::Debug for FramebufferCreateInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("FramebufferCreateInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("flags", &self.flags)
            .field("render_pass", &self.render_pass)
            .field("attachment_count", &self.attachment_count)
            .field("p_attachments", &self.p_attachments)
            .field("width", &self.width)
            .field("height", &self.height)
            .field("layers", &self.layers)
            .finish()
    }
}
impl FramebufferCreateInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> FramebufferCreateInfoBuilder<'a> {
        FramebufferCreateInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::FramebufferAttachmentsCreateInfo>
    for FramebufferCreateInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::FramebufferAttachmentsCreateInfoBuilder<'_>>
    for FramebufferCreateInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFramebufferCreateInfo.html) · Builder of [`FramebufferCreateInfo`]"]
#[repr(transparent)]
pub struct FramebufferCreateInfoBuilder<'a>(
    FramebufferCreateInfo,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> FramebufferCreateInfoBuilder<'a> {
    #[inline]
    pub fn new() -> FramebufferCreateInfoBuilder<'a> {
        FramebufferCreateInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn flags(mut self, flags: crate::vk1_0::FramebufferCreateFlags) -> Self {
        self.0.flags = flags as _;
        self
    }
    #[inline]
    pub fn render_pass(mut self, render_pass: crate::vk1_0::RenderPass) -> Self {
        self.0.render_pass = render_pass as _;
        self
    }
    #[inline]
    pub fn attachments(mut self, attachments: &'a [crate::vk1_0::ImageView]) -> Self {
        self.0.p_attachments = attachments.as_ptr() as _;
        self.0.attachment_count = attachments.len() as _;
        self
    }
    #[inline]
    pub fn width(mut self, width: u32) -> Self {
        self.0.width = width as _;
        self
    }
    #[inline]
    pub fn height(mut self, height: u32) -> Self {
        self.0.height = height as _;
        self
    }
    #[inline]
    pub fn layers(mut self, layers: u32) -> Self {
        self.0.layers = layers as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> FramebufferCreateInfo {
        self.0
    }
}
impl<'a> std::default::Default for FramebufferCreateInfoBuilder<'a> {
    fn default() -> FramebufferCreateInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for FramebufferCreateInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for FramebufferCreateInfoBuilder<'a> {
    type Target = FramebufferCreateInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for FramebufferCreateInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDrawIndirectCommand.html) · Structure"]
#[doc(alias = "VkDrawIndirectCommand")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DrawIndirectCommand {
    pub vertex_count: u32,
    pub instance_count: u32,
    pub first_vertex: u32,
    pub first_instance: u32,
}
impl Default for DrawIndirectCommand {
    fn default() -> Self {
        Self {
            vertex_count: Default::default(),
            instance_count: Default::default(),
            first_vertex: Default::default(),
            first_instance: Default::default(),
        }
    }
}
impl std::fmt::Debug for DrawIndirectCommand {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DrawIndirectCommand")
            .field("vertex_count", &self.vertex_count)
            .field("instance_count", &self.instance_count)
            .field("first_vertex", &self.first_vertex)
            .field("first_instance", &self.first_instance)
            .finish()
    }
}
impl DrawIndirectCommand {
    #[inline]
    pub fn into_builder<'a>(self) -> DrawIndirectCommandBuilder<'a> {
        DrawIndirectCommandBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDrawIndirectCommand.html) · Builder of [`DrawIndirectCommand`]"]
#[repr(transparent)]
pub struct DrawIndirectCommandBuilder<'a>(DrawIndirectCommand, std::marker::PhantomData<&'a ()>);
impl<'a> DrawIndirectCommandBuilder<'a> {
    #[inline]
    pub fn new() -> DrawIndirectCommandBuilder<'a> {
        DrawIndirectCommandBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn vertex_count(mut self, vertex_count: u32) -> Self {
        self.0.vertex_count = vertex_count as _;
        self
    }
    #[inline]
    pub fn instance_count(mut self, instance_count: u32) -> Self {
        self.0.instance_count = instance_count as _;
        self
    }
    #[inline]
    pub fn first_vertex(mut self, first_vertex: u32) -> Self {
        self.0.first_vertex = first_vertex as _;
        self
    }
    #[inline]
    pub fn first_instance(mut self, first_instance: u32) -> Self {
        self.0.first_instance = first_instance as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DrawIndirectCommand {
        self.0
    }
}
impl<'a> std::default::Default for DrawIndirectCommandBuilder<'a> {
    fn default() -> DrawIndirectCommandBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DrawIndirectCommandBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DrawIndirectCommandBuilder<'a> {
    type Target = DrawIndirectCommand;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DrawIndirectCommandBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDrawIndexedIndirectCommand.html) · Structure"]
#[doc(alias = "VkDrawIndexedIndirectCommand")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DrawIndexedIndirectCommand {
    pub index_count: u32,
    pub instance_count: u32,
    pub first_index: u32,
    pub vertex_offset: i32,
    pub first_instance: u32,
}
impl Default for DrawIndexedIndirectCommand {
    fn default() -> Self {
        Self {
            index_count: Default::default(),
            instance_count: Default::default(),
            first_index: Default::default(),
            vertex_offset: Default::default(),
            first_instance: Default::default(),
        }
    }
}
impl std::fmt::Debug for DrawIndexedIndirectCommand {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DrawIndexedIndirectCommand")
            .field("index_count", &self.index_count)
            .field("instance_count", &self.instance_count)
            .field("first_index", &self.first_index)
            .field("vertex_offset", &self.vertex_offset)
            .field("first_instance", &self.first_instance)
            .finish()
    }
}
impl DrawIndexedIndirectCommand {
    #[inline]
    pub fn into_builder<'a>(self) -> DrawIndexedIndirectCommandBuilder<'a> {
        DrawIndexedIndirectCommandBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDrawIndexedIndirectCommand.html) · Builder of [`DrawIndexedIndirectCommand`]"]
#[repr(transparent)]
pub struct DrawIndexedIndirectCommandBuilder<'a>(
    DrawIndexedIndirectCommand,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> DrawIndexedIndirectCommandBuilder<'a> {
    #[inline]
    pub fn new() -> DrawIndexedIndirectCommandBuilder<'a> {
        DrawIndexedIndirectCommandBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn index_count(mut self, index_count: u32) -> Self {
        self.0.index_count = index_count as _;
        self
    }
    #[inline]
    pub fn instance_count(mut self, instance_count: u32) -> Self {
        self.0.instance_count = instance_count as _;
        self
    }
    #[inline]
    pub fn first_index(mut self, first_index: u32) -> Self {
        self.0.first_index = first_index as _;
        self
    }
    #[inline]
    pub fn vertex_offset(mut self, vertex_offset: i32) -> Self {
        self.0.vertex_offset = vertex_offset as _;
        self
    }
    #[inline]
    pub fn first_instance(mut self, first_instance: u32) -> Self {
        self.0.first_instance = first_instance as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DrawIndexedIndirectCommand {
        self.0
    }
}
impl<'a> std::default::Default for DrawIndexedIndirectCommandBuilder<'a> {
    fn default() -> DrawIndexedIndirectCommandBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DrawIndexedIndirectCommandBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DrawIndexedIndirectCommandBuilder<'a> {
    type Target = DrawIndexedIndirectCommand;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DrawIndexedIndirectCommandBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDispatchIndirectCommand.html) · Structure"]
#[doc(alias = "VkDispatchIndirectCommand")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct DispatchIndirectCommand {
    pub x: u32,
    pub y: u32,
    pub z: u32,
}
impl Default for DispatchIndirectCommand {
    fn default() -> Self {
        Self {
            x: Default::default(),
            y: Default::default(),
            z: Default::default(),
        }
    }
}
impl std::fmt::Debug for DispatchIndirectCommand {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("DispatchIndirectCommand")
            .field("x", &self.x)
            .field("y", &self.y)
            .field("z", &self.z)
            .finish()
    }
}
impl DispatchIndirectCommand {
    #[inline]
    pub fn into_builder<'a>(self) -> DispatchIndirectCommandBuilder<'a> {
        DispatchIndirectCommandBuilder(self, std::marker::PhantomData)
    }
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDispatchIndirectCommand.html) · Builder of [`DispatchIndirectCommand`]"]
#[repr(transparent)]
pub struct DispatchIndirectCommandBuilder<'a>(
    DispatchIndirectCommand,
    std::marker::PhantomData<&'a ()>,
);
impl<'a> DispatchIndirectCommandBuilder<'a> {
    #[inline]
    pub fn new() -> DispatchIndirectCommandBuilder<'a> {
        DispatchIndirectCommandBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn x(mut self, x: u32) -> Self {
        self.0.x = x as _;
        self
    }
    #[inline]
    pub fn y(mut self, y: u32) -> Self {
        self.0.y = y as _;
        self
    }
    #[inline]
    pub fn z(mut self, z: u32) -> Self {
        self.0.z = z as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> DispatchIndirectCommand {
        self.0
    }
}
impl<'a> std::default::Default for DispatchIndirectCommandBuilder<'a> {
    fn default() -> DispatchIndirectCommandBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for DispatchIndirectCommandBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for DispatchIndirectCommandBuilder<'a> {
    type Target = DispatchIndirectCommand;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for DispatchIndirectCommandBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubmitInfo.html) · Structure"]
#[doc(alias = "VkSubmitInfo")]
#[derive(Copy, Clone)]
#[repr(C)]
pub struct SubmitInfo {
    pub s_type: crate::vk1_0::StructureType,
    pub p_next: *const std::ffi::c_void,
    pub wait_semaphore_count: u32,
    pub p_wait_semaphores: *const crate::vk1_0::Semaphore,
    pub p_wait_dst_stage_mask: *const crate::vk1_0::PipelineStageFlags,
    pub command_buffer_count: u32,
    pub p_command_buffers: *const crate::vk1_0::CommandBuffer,
    pub signal_semaphore_count: u32,
    pub p_signal_semaphores: *const crate::vk1_0::Semaphore,
}
impl Default for SubmitInfo {
    fn default() -> Self {
        Self {
            s_type: crate::vk1_0::StructureType::SUBMIT_INFO,
            p_next: std::ptr::null(),
            wait_semaphore_count: Default::default(),
            p_wait_semaphores: std::ptr::null(),
            p_wait_dst_stage_mask: std::ptr::null(),
            command_buffer_count: Default::default(),
            p_command_buffers: std::ptr::null(),
            signal_semaphore_count: Default::default(),
            p_signal_semaphores: std::ptr::null(),
        }
    }
}
impl std::fmt::Debug for SubmitInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        f.debug_struct("SubmitInfo")
            .field("s_type", &self.s_type)
            .field("p_next", &self.p_next)
            .field("wait_semaphore_count", &self.wait_semaphore_count)
            .field("p_wait_semaphores", &self.p_wait_semaphores)
            .field("p_wait_dst_stage_mask", &self.p_wait_dst_stage_mask)
            .field("command_buffer_count", &self.command_buffer_count)
            .field("p_command_buffers", &self.p_command_buffers)
            .field("signal_semaphore_count", &self.signal_semaphore_count)
            .field("p_signal_semaphores", &self.p_signal_semaphores)
            .finish()
    }
}
impl SubmitInfo {
    #[inline]
    pub fn into_builder<'a>(self) -> SubmitInfoBuilder<'a> {
        SubmitInfoBuilder(self, std::marker::PhantomData)
    }
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_win32_keyed_mutex::Win32KeyedMutexAcquireReleaseInfoNV,
    > for SubmitInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::nv_win32_keyed_mutex::Win32KeyedMutexAcquireReleaseInfoNVBuilder<'_>,
    > for SubmitInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_win32_keyed_mutex::Win32KeyedMutexAcquireReleaseInfoKHR,
    > for SubmitInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_win32_keyed_mutex::Win32KeyedMutexAcquireReleaseInfoKHRBuilder<'_>,
    > for SubmitInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_semaphore_win32::D3D12FenceSubmitInfoKHR,
    > for SubmitInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_external_semaphore_win32::D3D12FenceSubmitInfoKHRBuilder<'_>,
    > for SubmitInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupSubmitInfo> for SubmitInfoBuilder<'a> {}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::DeviceGroupSubmitInfoBuilder<'_>>
    for SubmitInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ProtectedSubmitInfo> for SubmitInfoBuilder<'a> {}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_1::ProtectedSubmitInfoBuilder<'_>>
    for SubmitInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::TimelineSemaphoreSubmitInfo>
    for SubmitInfoBuilder<'a>
{
}
impl<'a> crate::ExtendableFrom<'a, crate::vk1_2::TimelineSemaphoreSubmitInfoBuilder<'_>>
    for SubmitInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_performance_query::PerformanceQuerySubmitInfoKHR,
    > for SubmitInfoBuilder<'a>
{
}
impl<'a>
    crate::ExtendableFrom<
        'a,
        crate::extensions::khr_performance_query::PerformanceQuerySubmitInfoKHRBuilder<'_>,
    > for SubmitInfoBuilder<'a>
{
}
#[derive(Copy, Clone)]
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSubmitInfo.html) · Builder of [`SubmitInfo`]"]
#[repr(transparent)]
pub struct SubmitInfoBuilder<'a>(SubmitInfo, std::marker::PhantomData<&'a ()>);
impl<'a> SubmitInfoBuilder<'a> {
    #[inline]
    pub fn new() -> SubmitInfoBuilder<'a> {
        SubmitInfoBuilder(Default::default(), std::marker::PhantomData)
    }
    #[inline]
    pub fn wait_semaphores(mut self, wait_semaphores: &'a [crate::vk1_0::Semaphore]) -> Self {
        self.0.p_wait_semaphores = wait_semaphores.as_ptr() as _;
        self.0.wait_semaphore_count = wait_semaphores.len() as _;
        self
    }
    #[inline]
    pub fn wait_dst_stage_mask(
        mut self,
        wait_dst_stage_mask: &'a [crate::vk1_0::PipelineStageFlags],
    ) -> Self {
        self.0.p_wait_dst_stage_mask = wait_dst_stage_mask.as_ptr() as _;
        self.0.wait_semaphore_count = wait_dst_stage_mask.len() as _;
        self
    }
    #[inline]
    pub fn command_buffers(mut self, command_buffers: &'a [crate::vk1_0::CommandBuffer]) -> Self {
        self.0.p_command_buffers = command_buffers.as_ptr() as _;
        self.0.command_buffer_count = command_buffers.len() as _;
        self
    }
    #[inline]
    pub fn signal_semaphores(mut self, signal_semaphores: &'a [crate::vk1_0::Semaphore]) -> Self {
        self.0.p_signal_semaphores = signal_semaphores.as_ptr() as _;
        self.0.signal_semaphore_count = signal_semaphores.len() as _;
        self
    }
    #[inline]
    #[doc = "Discards all lifetime information. Use the `Deref` and `DerefMut` implementations if possible."]
    pub fn build(self) -> SubmitInfo {
        self.0
    }
}
impl<'a> std::default::Default for SubmitInfoBuilder<'a> {
    fn default() -> SubmitInfoBuilder<'a> {
        Self::new()
    }
}
impl<'a> std::fmt::Debug for SubmitInfoBuilder<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        std::fmt::Debug::fmt(&self.0, f)
    }
}
impl<'a> std::ops::Deref for SubmitInfoBuilder<'a> {
    type Target = SubmitInfo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl<'a> std::ops::DerefMut for SubmitInfoBuilder<'a> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_MAKE_VERSION.html) · Define"]
pub const fn make_version(major: u32, minor: u32, patch: u32) -> u32 {
    (major << 22) | (minor << 12) | patch
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_VERSION_MAJOR.html) · Define"]
pub const fn version_major(version: u32) -> u32 {
    version >> 22
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_VERSION_MINOR.html) · Define"]
pub const fn version_minor(version: u32) -> u32 {
    (version >> 12) & 0x3ff
}
#[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_VERSION_PATCH.html) · Define"]
pub const fn version_patch(version: u32) -> u32 {
    version & 0xfff
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl<T> crate::EntryLoader<T> {
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateInstance.html) · Function"]
    #[doc(alias = "vkCreateInstance")]
    pub unsafe fn create_instance(
        &self,
        create_info: &crate::vk1_0::InstanceCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        instance: Option<crate::vk1_0::Instance>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::Instance> {
        let _function = self
            .create_instance
            .expect("`create_instance` is not loaded");
        let mut instance = match instance {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut instance,
        );
        crate::utils::VulkanResult::new(_return, instance)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateInstanceLayerProperties.html) · Function"]
    #[doc(alias = "vkEnumerateInstanceLayerProperties")]
    pub unsafe fn enumerate_instance_layer_properties(
        &self,
        property_count: Option<u32>,
    ) -> crate::utils::VulkanResult<Vec<crate::vk1_0::LayerProperties>> {
        let _function = self
            .enumerate_instance_layer_properties
            .expect("`enumerate_instance_layer_properties` is not loaded");
        let mut property_count = match property_count {
            Some(v) => v,
            None => {
                let mut v = Default::default();
                _function(&mut v, std::ptr::null_mut());
                v
            }
        };
        let mut properties = vec![Default::default(); property_count as _];
        let _return = _function(&mut property_count, properties.as_mut_ptr());
        crate::utils::VulkanResult::new(_return, properties)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateInstanceExtensionProperties.html) · Function"]
    #[doc(alias = "vkEnumerateInstanceExtensionProperties")]
    pub unsafe fn enumerate_instance_extension_properties(
        &self,
        layer_name: Option<&std::ffi::CStr>,
        property_count: Option<u32>,
    ) -> crate::utils::VulkanResult<Vec<crate::vk1_0::ExtensionProperties>> {
        let _function = self
            .enumerate_instance_extension_properties
            .expect("`enumerate_instance_extension_properties` is not loaded");
        let mut property_count = match property_count {
            Some(v) => v,
            None => {
                let mut v = Default::default();
                _function(
                    match layer_name {
                        Some(v) => v.as_ptr(),
                        None => std::ptr::null(),
                    },
                    &mut v,
                    std::ptr::null_mut(),
                );
                v
            }
        };
        let mut properties = vec![Default::default(); property_count as _];
        let _return = _function(
            match layer_name {
                Some(v) => v.as_ptr(),
                None => std::ptr::null(),
            },
            &mut property_count,
            properties.as_mut_ptr(),
        );
        crate::utils::VulkanResult::new(_return, properties)
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl crate::InstanceLoader {
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyInstance.html) · Function"]
    #[doc(alias = "vkDestroyInstance")]
    pub unsafe fn destroy_instance(
        &self,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_instance
            .expect("`destroy_instance` is not loaded");
        let _return = _function(
            self.handle,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumeratePhysicalDevices.html) · Function"]
    #[doc(alias = "vkEnumeratePhysicalDevices")]
    pub unsafe fn enumerate_physical_devices(
        &self,
        physical_device_count: Option<u32>,
    ) -> crate::utils::VulkanResult<Vec<crate::vk1_0::PhysicalDevice>> {
        let _function = self
            .enumerate_physical_devices
            .expect("`enumerate_physical_devices` is not loaded");
        let mut physical_device_count = match physical_device_count {
            Some(v) => v,
            None => {
                let mut v = Default::default();
                _function(self.handle, &mut v, std::ptr::null_mut());
                v
            }
        };
        let mut physical_devices = vec![Default::default(); physical_device_count as _];
        let _return = _function(
            self.handle,
            &mut physical_device_count,
            physical_devices.as_mut_ptr(),
        );
        crate::utils::VulkanResult::new(_return, physical_devices)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetInstanceProcAddr.html) · Function"]
    #[doc(alias = "vkGetInstanceProcAddr")]
    pub unsafe fn get_instance_proc_addr(
        &self,
        name: Option<&std::ffi::CStr>,
    ) -> Option<crate::vk1_0::PFN_vkVoidFunction> {
        let _function = self
            .get_instance_proc_addr
            .expect("`get_instance_proc_addr` is not loaded");
        let _return = _function(
            self.handle,
            match name {
                Some(v) => v.as_ptr(),
                None => std::ptr::null(),
            },
        );
        _return
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceProperties.html) · Function"]
    #[doc(alias = "vkGetPhysicalDeviceProperties")]
    pub unsafe fn get_physical_device_properties(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        properties: Option<crate::vk1_0::PhysicalDeviceProperties>,
    ) -> crate::vk1_0::PhysicalDeviceProperties {
        let _function = self
            .get_physical_device_properties
            .expect("`get_physical_device_properties` is not loaded");
        let mut properties = match properties {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(physical_device as _, &mut properties);
        properties
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html) · Function"]
    #[doc(alias = "vkGetPhysicalDeviceQueueFamilyProperties")]
    pub unsafe fn get_physical_device_queue_family_properties(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        queue_family_property_count: Option<u32>,
    ) -> Vec<crate::vk1_0::QueueFamilyProperties> {
        let _function = self
            .get_physical_device_queue_family_properties
            .expect("`get_physical_device_queue_family_properties` is not loaded");
        let mut queue_family_property_count = match queue_family_property_count {
            Some(v) => v,
            None => {
                let mut v = Default::default();
                _function(physical_device as _, &mut v, std::ptr::null_mut());
                v
            }
        };
        let mut queue_family_properties =
            vec![Default::default(); queue_family_property_count as _];
        let _return = _function(
            physical_device as _,
            &mut queue_family_property_count,
            queue_family_properties.as_mut_ptr(),
        );
        queue_family_properties
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceMemoryProperties.html) · Function"]
    #[doc(alias = "vkGetPhysicalDeviceMemoryProperties")]
    pub unsafe fn get_physical_device_memory_properties(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        memory_properties: Option<crate::vk1_0::PhysicalDeviceMemoryProperties>,
    ) -> crate::vk1_0::PhysicalDeviceMemoryProperties {
        let _function = self
            .get_physical_device_memory_properties
            .expect("`get_physical_device_memory_properties` is not loaded");
        let mut memory_properties = match memory_properties {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(physical_device as _, &mut memory_properties);
        memory_properties
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceFeatures.html) · Function"]
    #[doc(alias = "vkGetPhysicalDeviceFeatures")]
    pub unsafe fn get_physical_device_features(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        features: Option<crate::vk1_0::PhysicalDeviceFeatures>,
    ) -> crate::vk1_0::PhysicalDeviceFeatures {
        let _function = self
            .get_physical_device_features
            .expect("`get_physical_device_features` is not loaded");
        let mut features = match features {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(physical_device as _, &mut features);
        features
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceFormatProperties.html) · Function"]
    #[doc(alias = "vkGetPhysicalDeviceFormatProperties")]
    pub unsafe fn get_physical_device_format_properties(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        format: crate::vk1_0::Format,
        format_properties: Option<crate::vk1_0::FormatProperties>,
    ) -> crate::vk1_0::FormatProperties {
        let _function = self
            .get_physical_device_format_properties
            .expect("`get_physical_device_format_properties` is not loaded");
        let mut format_properties = match format_properties {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(physical_device as _, format as _, &mut format_properties);
        format_properties
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceImageFormatProperties.html) · Function"]
    #[doc(alias = "vkGetPhysicalDeviceImageFormatProperties")]
    pub unsafe fn get_physical_device_image_format_properties(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        format: crate::vk1_0::Format,
        _type: crate::vk1_0::ImageType,
        tiling: crate::vk1_0::ImageTiling,
        usage: crate::vk1_0::ImageUsageFlags,
        flags: Option<crate::vk1_0::ImageCreateFlags>,
        image_format_properties: Option<crate::vk1_0::ImageFormatProperties>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::ImageFormatProperties> {
        let _function = self
            .get_physical_device_image_format_properties
            .expect("`get_physical_device_image_format_properties` is not loaded");
        let mut image_format_properties = match image_format_properties {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            physical_device as _,
            format as _,
            _type as _,
            tiling as _,
            usage as _,
            match flags {
                Some(v) => v,
                None => Default::default(),
            },
            &mut image_format_properties,
        );
        crate::utils::VulkanResult::new(_return, image_format_properties)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDevice.html) · Function"]
    #[doc(alias = "vkCreateDevice")]
    pub unsafe fn create_device(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        create_info: &crate::vk1_0::DeviceCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        device: Option<crate::vk1_0::Device>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::Device> {
        let _function = self.create_device.expect("`create_device` is not loaded");
        let mut device = match device {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            physical_device as _,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut device,
        );
        crate::utils::VulkanResult::new(_return, device)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateDeviceLayerProperties.html) · Function"]
    #[doc(alias = "vkEnumerateDeviceLayerProperties")]
    pub unsafe fn enumerate_device_layer_properties(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        property_count: Option<u32>,
    ) -> crate::utils::VulkanResult<Vec<crate::vk1_0::LayerProperties>> {
        let _function = self
            .enumerate_device_layer_properties
            .expect("`enumerate_device_layer_properties` is not loaded");
        let mut property_count = match property_count {
            Some(v) => v,
            None => {
                let mut v = Default::default();
                _function(physical_device as _, &mut v, std::ptr::null_mut());
                v
            }
        };
        let mut properties = vec![Default::default(); property_count as _];
        let _return = _function(
            physical_device as _,
            &mut property_count,
            properties.as_mut_ptr(),
        );
        crate::utils::VulkanResult::new(_return, properties)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEnumerateDeviceExtensionProperties.html) · Function"]
    #[doc(alias = "vkEnumerateDeviceExtensionProperties")]
    pub unsafe fn enumerate_device_extension_properties(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        layer_name: Option<&std::ffi::CStr>,
        property_count: Option<u32>,
    ) -> crate::utils::VulkanResult<Vec<crate::vk1_0::ExtensionProperties>> {
        let _function = self
            .enumerate_device_extension_properties
            .expect("`enumerate_device_extension_properties` is not loaded");
        let mut property_count = match property_count {
            Some(v) => v,
            None => {
                let mut v = Default::default();
                _function(
                    physical_device as _,
                    match layer_name {
                        Some(v) => v.as_ptr(),
                        None => std::ptr::null(),
                    },
                    &mut v,
                    std::ptr::null_mut(),
                );
                v
            }
        };
        let mut properties = vec![Default::default(); property_count as _];
        let _return = _function(
            physical_device as _,
            match layer_name {
                Some(v) => v.as_ptr(),
                None => std::ptr::null(),
            },
            &mut property_count,
            properties.as_mut_ptr(),
        );
        crate::utils::VulkanResult::new(_return, properties)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html) · Function"]
    #[doc(alias = "vkGetPhysicalDeviceSparseImageFormatProperties")]
    pub unsafe fn get_physical_device_sparse_image_format_properties(
        &self,
        physical_device: crate::vk1_0::PhysicalDevice,
        format: crate::vk1_0::Format,
        _type: crate::vk1_0::ImageType,
        samples: crate::vk1_0::SampleCountFlagBits,
        usage: crate::vk1_0::ImageUsageFlags,
        tiling: crate::vk1_0::ImageTiling,
        property_count: Option<u32>,
    ) -> Vec<crate::vk1_0::SparseImageFormatProperties> {
        let _function = self
            .get_physical_device_sparse_image_format_properties
            .expect("`get_physical_device_sparse_image_format_properties` is not loaded");
        let mut property_count = match property_count {
            Some(v) => v,
            None => {
                let mut v = Default::default();
                _function(
                    physical_device as _,
                    format as _,
                    _type as _,
                    samples as _,
                    usage as _,
                    tiling as _,
                    &mut v,
                    std::ptr::null_mut(),
                );
                v
            }
        };
        let mut properties = vec![Default::default(); property_count as _];
        let _return = _function(
            physical_device as _,
            format as _,
            _type as _,
            samples as _,
            usage as _,
            tiling as _,
            &mut property_count,
            properties.as_mut_ptr(),
        );
        properties
    }
}
#[doc = "Provided by [`crate::vk1_0`]"]
impl crate::DeviceLoader {
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceProcAddr.html) · Function"]
    #[doc(alias = "vkGetDeviceProcAddr")]
    pub unsafe fn get_device_proc_addr(
        &self,
        name: Option<&std::ffi::CStr>,
    ) -> Option<crate::vk1_0::PFN_vkVoidFunction> {
        let _function = self
            .get_device_proc_addr
            .expect("`get_device_proc_addr` is not loaded");
        let _return = _function(
            self.handle,
            match name {
                Some(v) => v.as_ptr(),
                None => std::ptr::null(),
            },
        );
        _return
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDevice.html) · Function"]
    #[doc(alias = "vkDestroyDevice")]
    pub unsafe fn destroy_device(
        &self,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self.destroy_device.expect("`destroy_device` is not loaded");
        let _return = _function(
            self.handle,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceQueue.html) · Function"]
    #[doc(alias = "vkGetDeviceQueue")]
    pub unsafe fn get_device_queue(
        &self,
        queue_family_index: u32,
        queue_index: u32,
        queue: Option<crate::vk1_0::Queue>,
    ) -> crate::vk1_0::Queue {
        let _function = self
            .get_device_queue
            .expect("`get_device_queue` is not loaded");
        let mut queue = match queue {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            queue_family_index as _,
            queue_index as _,
            &mut queue,
        );
        queue
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueSubmit.html) · Function"]
    #[doc(alias = "vkQueueSubmit")]
    pub unsafe fn queue_submit(
        &self,
        queue: crate::vk1_0::Queue,
        submits: &[crate::vk1_0::SubmitInfoBuilder],
        fence: Option<crate::vk1_0::Fence>,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self.queue_submit.expect("`queue_submit` is not loaded");
        let submit_count = submits.len();
        let _return = _function(
            queue as _,
            submit_count as _,
            submits.as_ptr() as _,
            match fence {
                Some(v) => v,
                None => Default::default(),
            },
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueWaitIdle.html) · Function"]
    #[doc(alias = "vkQueueWaitIdle")]
    pub unsafe fn queue_wait_idle(
        &self,
        queue: crate::vk1_0::Queue,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .queue_wait_idle
            .expect("`queue_wait_idle` is not loaded");
        let _return = _function(queue as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDeviceWaitIdle.html) · Function"]
    #[doc(alias = "vkDeviceWaitIdle")]
    pub unsafe fn device_wait_idle(&self) -> crate::utils::VulkanResult<()> {
        let _function = self
            .device_wait_idle
            .expect("`device_wait_idle` is not loaded");
        let _return = _function(self.handle);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkAllocateMemory.html) · Function"]
    #[doc(alias = "vkAllocateMemory")]
    pub unsafe fn allocate_memory(
        &self,
        allocate_info: &crate::vk1_0::MemoryAllocateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        memory: Option<crate::vk1_0::DeviceMemory>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::DeviceMemory> {
        let _function = self
            .allocate_memory
            .expect("`allocate_memory` is not loaded");
        let mut memory = match memory {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            allocate_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut memory,
        );
        crate::utils::VulkanResult::new(_return, memory)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFreeMemory.html) · Function"]
    #[doc(alias = "vkFreeMemory")]
    pub unsafe fn free_memory(
        &self,
        memory: Option<crate::vk1_0::DeviceMemory>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self.free_memory.expect("`free_memory` is not loaded");
        let _return = _function(
            self.handle,
            match memory {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkMapMemory.html) · Function"]
    #[doc(alias = "vkMapMemory")]
    pub unsafe fn map_memory(
        &self,
        memory: crate::vk1_0::DeviceMemory,
        offset: crate::vk1_0::DeviceSize,
        size: crate::vk1_0::DeviceSize,
        flags: Option<crate::vk1_0::MemoryMapFlags>,
        data: *mut *mut std::ffi::c_void,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self.map_memory.expect("`map_memory` is not loaded");
        let _return = _function(
            self.handle,
            memory as _,
            offset as _,
            size as _,
            match flags {
                Some(v) => v,
                None => Default::default(),
            },
            data,
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkUnmapMemory.html) · Function"]
    #[doc(alias = "vkUnmapMemory")]
    pub unsafe fn unmap_memory(&self, memory: crate::vk1_0::DeviceMemory) -> () {
        let _function = self.unmap_memory.expect("`unmap_memory` is not loaded");
        let _return = _function(self.handle, memory as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFlushMappedMemoryRanges.html) · Function"]
    #[doc(alias = "vkFlushMappedMemoryRanges")]
    pub unsafe fn flush_mapped_memory_ranges(
        &self,
        memory_ranges: &[crate::vk1_0::MappedMemoryRangeBuilder],
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .flush_mapped_memory_ranges
            .expect("`flush_mapped_memory_ranges` is not loaded");
        let memory_range_count = memory_ranges.len();
        let _return = _function(
            self.handle,
            memory_range_count as _,
            memory_ranges.as_ptr() as _,
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkInvalidateMappedMemoryRanges.html) · Function"]
    #[doc(alias = "vkInvalidateMappedMemoryRanges")]
    pub unsafe fn invalidate_mapped_memory_ranges(
        &self,
        memory_ranges: &[crate::vk1_0::MappedMemoryRangeBuilder],
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .invalidate_mapped_memory_ranges
            .expect("`invalidate_mapped_memory_ranges` is not loaded");
        let memory_range_count = memory_ranges.len();
        let _return = _function(
            self.handle,
            memory_range_count as _,
            memory_ranges.as_ptr() as _,
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceMemoryCommitment.html) · Function"]
    #[doc(alias = "vkGetDeviceMemoryCommitment")]
    pub unsafe fn get_device_memory_commitment(
        &self,
        memory: crate::vk1_0::DeviceMemory,
        committed_memory_in_bytes: Option<crate::vk1_0::DeviceSize>,
    ) -> crate::vk1_0::DeviceSize {
        let _function = self
            .get_device_memory_commitment
            .expect("`get_device_memory_commitment` is not loaded");
        let mut committed_memory_in_bytes = match committed_memory_in_bytes {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(self.handle, memory as _, &mut committed_memory_in_bytes);
        committed_memory_in_bytes
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferMemoryRequirements.html) · Function"]
    #[doc(alias = "vkGetBufferMemoryRequirements")]
    pub unsafe fn get_buffer_memory_requirements(
        &self,
        buffer: crate::vk1_0::Buffer,
        memory_requirements: Option<crate::vk1_0::MemoryRequirements>,
    ) -> crate::vk1_0::MemoryRequirements {
        let _function = self
            .get_buffer_memory_requirements
            .expect("`get_buffer_memory_requirements` is not loaded");
        let mut memory_requirements = match memory_requirements {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(self.handle, buffer as _, &mut memory_requirements);
        memory_requirements
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBindBufferMemory.html) · Function"]
    #[doc(alias = "vkBindBufferMemory")]
    pub unsafe fn bind_buffer_memory(
        &self,
        buffer: crate::vk1_0::Buffer,
        memory: crate::vk1_0::DeviceMemory,
        memory_offset: crate::vk1_0::DeviceSize,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .bind_buffer_memory
            .expect("`bind_buffer_memory` is not loaded");
        let _return = _function(self.handle, buffer as _, memory as _, memory_offset as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageMemoryRequirements.html) · Function"]
    #[doc(alias = "vkGetImageMemoryRequirements")]
    pub unsafe fn get_image_memory_requirements(
        &self,
        image: crate::vk1_0::Image,
        memory_requirements: Option<crate::vk1_0::MemoryRequirements>,
    ) -> crate::vk1_0::MemoryRequirements {
        let _function = self
            .get_image_memory_requirements
            .expect("`get_image_memory_requirements` is not loaded");
        let mut memory_requirements = match memory_requirements {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(self.handle, image as _, &mut memory_requirements);
        memory_requirements
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBindImageMemory.html) · Function"]
    #[doc(alias = "vkBindImageMemory")]
    pub unsafe fn bind_image_memory(
        &self,
        image: crate::vk1_0::Image,
        memory: crate::vk1_0::DeviceMemory,
        memory_offset: crate::vk1_0::DeviceSize,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .bind_image_memory
            .expect("`bind_image_memory` is not loaded");
        let _return = _function(self.handle, image as _, memory as _, memory_offset as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageSparseMemoryRequirements.html) · Function"]
    #[doc(alias = "vkGetImageSparseMemoryRequirements")]
    pub unsafe fn get_image_sparse_memory_requirements(
        &self,
        image: crate::vk1_0::Image,
        sparse_memory_requirement_count: Option<u32>,
    ) -> Vec<crate::vk1_0::SparseImageMemoryRequirements> {
        let _function = self
            .get_image_sparse_memory_requirements
            .expect("`get_image_sparse_memory_requirements` is not loaded");
        let mut sparse_memory_requirement_count = match sparse_memory_requirement_count {
            Some(v) => v,
            None => {
                let mut v = Default::default();
                _function(self.handle, image as _, &mut v, std::ptr::null_mut());
                v
            }
        };
        let mut sparse_memory_requirements =
            vec![Default::default(); sparse_memory_requirement_count as _];
        let _return = _function(
            self.handle,
            image as _,
            &mut sparse_memory_requirement_count,
            sparse_memory_requirements.as_mut_ptr(),
        );
        sparse_memory_requirements
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkQueueBindSparse.html) · Function"]
    #[doc(alias = "vkQueueBindSparse")]
    pub unsafe fn queue_bind_sparse(
        &self,
        queue: crate::vk1_0::Queue,
        bind_info: &[crate::vk1_0::BindSparseInfoBuilder],
        fence: Option<crate::vk1_0::Fence>,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .queue_bind_sparse
            .expect("`queue_bind_sparse` is not loaded");
        let bind_info_count = bind_info.len();
        let _return = _function(
            queue as _,
            bind_info_count as _,
            bind_info.as_ptr() as _,
            match fence {
                Some(v) => v,
                None => Default::default(),
            },
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateFence.html) · Function"]
    #[doc(alias = "vkCreateFence")]
    pub unsafe fn create_fence(
        &self,
        create_info: &crate::vk1_0::FenceCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        fence: Option<crate::vk1_0::Fence>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::Fence> {
        let _function = self.create_fence.expect("`create_fence` is not loaded");
        let mut fence = match fence {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut fence,
        );
        crate::utils::VulkanResult::new(_return, fence)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyFence.html) · Function"]
    #[doc(alias = "vkDestroyFence")]
    pub unsafe fn destroy_fence(
        &self,
        fence: Option<crate::vk1_0::Fence>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self.destroy_fence.expect("`destroy_fence` is not loaded");
        let _return = _function(
            self.handle,
            match fence {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetFences.html) · Function"]
    #[doc(alias = "vkResetFences")]
    pub unsafe fn reset_fences(
        &self,
        fences: &[crate::vk1_0::Fence],
    ) -> crate::utils::VulkanResult<()> {
        let _function = self.reset_fences.expect("`reset_fences` is not loaded");
        let fence_count = fences.len();
        let _return = _function(self.handle, fence_count as _, fences.as_ptr() as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetFenceStatus.html) · Function"]
    #[doc(alias = "vkGetFenceStatus")]
    pub unsafe fn get_fence_status(
        &self,
        fence: crate::vk1_0::Fence,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .get_fence_status
            .expect("`get_fence_status` is not loaded");
        let _return = _function(self.handle, fence as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkWaitForFences.html) · Function"]
    #[doc(alias = "vkWaitForFences")]
    pub unsafe fn wait_for_fences(
        &self,
        fences: &[crate::vk1_0::Fence],
        wait_all: bool,
        timeout: u64,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .wait_for_fences
            .expect("`wait_for_fences` is not loaded");
        let fence_count = fences.len();
        let _return = _function(
            self.handle,
            fence_count as _,
            fences.as_ptr() as _,
            wait_all as _,
            timeout as _,
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateSemaphore.html) · Function"]
    #[doc(alias = "vkCreateSemaphore")]
    pub unsafe fn create_semaphore(
        &self,
        create_info: &crate::vk1_0::SemaphoreCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        semaphore: Option<crate::vk1_0::Semaphore>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::Semaphore> {
        let _function = self
            .create_semaphore
            .expect("`create_semaphore` is not loaded");
        let mut semaphore = match semaphore {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut semaphore,
        );
        crate::utils::VulkanResult::new(_return, semaphore)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroySemaphore.html) · Function"]
    #[doc(alias = "vkDestroySemaphore")]
    pub unsafe fn destroy_semaphore(
        &self,
        semaphore: Option<crate::vk1_0::Semaphore>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_semaphore
            .expect("`destroy_semaphore` is not loaded");
        let _return = _function(
            self.handle,
            match semaphore {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateEvent.html) · Function"]
    #[doc(alias = "vkCreateEvent")]
    pub unsafe fn create_event(
        &self,
        create_info: &crate::vk1_0::EventCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        event: Option<crate::vk1_0::Event>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::Event> {
        let _function = self.create_event.expect("`create_event` is not loaded");
        let mut event = match event {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut event,
        );
        crate::utils::VulkanResult::new(_return, event)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyEvent.html) · Function"]
    #[doc(alias = "vkDestroyEvent")]
    pub unsafe fn destroy_event(
        &self,
        event: Option<crate::vk1_0::Event>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self.destroy_event.expect("`destroy_event` is not loaded");
        let _return = _function(
            self.handle,
            match event {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetEventStatus.html) · Function"]
    #[doc(alias = "vkGetEventStatus")]
    pub unsafe fn get_event_status(
        &self,
        event: crate::vk1_0::Event,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .get_event_status
            .expect("`get_event_status` is not loaded");
        let _return = _function(self.handle, event as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkSetEvent.html) · Function"]
    #[doc(alias = "vkSetEvent")]
    pub unsafe fn set_event(&self, event: crate::vk1_0::Event) -> crate::utils::VulkanResult<()> {
        let _function = self.set_event.expect("`set_event` is not loaded");
        let _return = _function(self.handle, event as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetEvent.html) · Function"]
    #[doc(alias = "vkResetEvent")]
    pub unsafe fn reset_event(&self, event: crate::vk1_0::Event) -> crate::utils::VulkanResult<()> {
        let _function = self.reset_event.expect("`reset_event` is not loaded");
        let _return = _function(self.handle, event as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateQueryPool.html) · Function"]
    #[doc(alias = "vkCreateQueryPool")]
    pub unsafe fn create_query_pool(
        &self,
        create_info: &crate::vk1_0::QueryPoolCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        query_pool: Option<crate::vk1_0::QueryPool>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::QueryPool> {
        let _function = self
            .create_query_pool
            .expect("`create_query_pool` is not loaded");
        let mut query_pool = match query_pool {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut query_pool,
        );
        crate::utils::VulkanResult::new(_return, query_pool)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyQueryPool.html) · Function"]
    #[doc(alias = "vkDestroyQueryPool")]
    pub unsafe fn destroy_query_pool(
        &self,
        query_pool: Option<crate::vk1_0::QueryPool>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_query_pool
            .expect("`destroy_query_pool` is not loaded");
        let _return = _function(
            self.handle,
            match query_pool {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetQueryPoolResults.html) · Function"]
    #[doc(alias = "vkGetQueryPoolResults")]
    pub unsafe fn get_query_pool_results(
        &self,
        query_pool: crate::vk1_0::QueryPool,
        first_query: u32,
        query_count: u32,
        data_size: usize,
        data: *mut std::ffi::c_void,
        stride: crate::vk1_0::DeviceSize,
        flags: Option<crate::vk1_0::QueryResultFlags>,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .get_query_pool_results
            .expect("`get_query_pool_results` is not loaded");
        let _return = _function(
            self.handle,
            query_pool as _,
            first_query as _,
            query_count as _,
            data_size,
            data,
            stride as _,
            match flags {
                Some(v) => v,
                None => Default::default(),
            },
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateBuffer.html) · Function"]
    #[doc(alias = "vkCreateBuffer")]
    pub unsafe fn create_buffer(
        &self,
        create_info: &crate::vk1_0::BufferCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        buffer: Option<crate::vk1_0::Buffer>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::Buffer> {
        let _function = self.create_buffer.expect("`create_buffer` is not loaded");
        let mut buffer = match buffer {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut buffer,
        );
        crate::utils::VulkanResult::new(_return, buffer)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyBuffer.html) · Function"]
    #[doc(alias = "vkDestroyBuffer")]
    pub unsafe fn destroy_buffer(
        &self,
        buffer: Option<crate::vk1_0::Buffer>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self.destroy_buffer.expect("`destroy_buffer` is not loaded");
        let _return = _function(
            self.handle,
            match buffer {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateBufferView.html) · Function"]
    #[doc(alias = "vkCreateBufferView")]
    pub unsafe fn create_buffer_view(
        &self,
        create_info: &crate::vk1_0::BufferViewCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        view: Option<crate::vk1_0::BufferView>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::BufferView> {
        let _function = self
            .create_buffer_view
            .expect("`create_buffer_view` is not loaded");
        let mut view = match view {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut view,
        );
        crate::utils::VulkanResult::new(_return, view)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyBufferView.html) · Function"]
    #[doc(alias = "vkDestroyBufferView")]
    pub unsafe fn destroy_buffer_view(
        &self,
        buffer_view: Option<crate::vk1_0::BufferView>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_buffer_view
            .expect("`destroy_buffer_view` is not loaded");
        let _return = _function(
            self.handle,
            match buffer_view {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateImage.html) · Function"]
    #[doc(alias = "vkCreateImage")]
    pub unsafe fn create_image(
        &self,
        create_info: &crate::vk1_0::ImageCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        image: Option<crate::vk1_0::Image>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::Image> {
        let _function = self.create_image.expect("`create_image` is not loaded");
        let mut image = match image {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut image,
        );
        crate::utils::VulkanResult::new(_return, image)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyImage.html) · Function"]
    #[doc(alias = "vkDestroyImage")]
    pub unsafe fn destroy_image(
        &self,
        image: Option<crate::vk1_0::Image>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self.destroy_image.expect("`destroy_image` is not loaded");
        let _return = _function(
            self.handle,
            match image {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetImageSubresourceLayout.html) · Function"]
    #[doc(alias = "vkGetImageSubresourceLayout")]
    pub unsafe fn get_image_subresource_layout(
        &self,
        image: crate::vk1_0::Image,
        subresource: &crate::vk1_0::ImageSubresource,
        layout: Option<crate::vk1_0::SubresourceLayout>,
    ) -> crate::vk1_0::SubresourceLayout {
        let _function = self
            .get_image_subresource_layout
            .expect("`get_image_subresource_layout` is not loaded");
        let mut layout = match layout {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(self.handle, image as _, subresource as _, &mut layout);
        layout
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateImageView.html) · Function"]
    #[doc(alias = "vkCreateImageView")]
    pub unsafe fn create_image_view(
        &self,
        create_info: &crate::vk1_0::ImageViewCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        view: Option<crate::vk1_0::ImageView>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::ImageView> {
        let _function = self
            .create_image_view
            .expect("`create_image_view` is not loaded");
        let mut view = match view {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut view,
        );
        crate::utils::VulkanResult::new(_return, view)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyImageView.html) · Function"]
    #[doc(alias = "vkDestroyImageView")]
    pub unsafe fn destroy_image_view(
        &self,
        image_view: Option<crate::vk1_0::ImageView>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_image_view
            .expect("`destroy_image_view` is not loaded");
        let _return = _function(
            self.handle,
            match image_view {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateShaderModule.html) · Function"]
    #[doc(alias = "vkCreateShaderModule")]
    pub unsafe fn create_shader_module(
        &self,
        create_info: &crate::vk1_0::ShaderModuleCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        shader_module: Option<crate::vk1_0::ShaderModule>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::ShaderModule> {
        let _function = self
            .create_shader_module
            .expect("`create_shader_module` is not loaded");
        let mut shader_module = match shader_module {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut shader_module,
        );
        crate::utils::VulkanResult::new(_return, shader_module)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyShaderModule.html) · Function"]
    #[doc(alias = "vkDestroyShaderModule")]
    pub unsafe fn destroy_shader_module(
        &self,
        shader_module: Option<crate::vk1_0::ShaderModule>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_shader_module
            .expect("`destroy_shader_module` is not loaded");
        let _return = _function(
            self.handle,
            match shader_module {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreatePipelineCache.html) · Function"]
    #[doc(alias = "vkCreatePipelineCache")]
    pub unsafe fn create_pipeline_cache(
        &self,
        create_info: &crate::vk1_0::PipelineCacheCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        pipeline_cache: Option<crate::vk1_0::PipelineCache>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::PipelineCache> {
        let _function = self
            .create_pipeline_cache
            .expect("`create_pipeline_cache` is not loaded");
        let mut pipeline_cache = match pipeline_cache {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut pipeline_cache,
        );
        crate::utils::VulkanResult::new(_return, pipeline_cache)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyPipelineCache.html) · Function"]
    #[doc(alias = "vkDestroyPipelineCache")]
    pub unsafe fn destroy_pipeline_cache(
        &self,
        pipeline_cache: Option<crate::vk1_0::PipelineCache>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_pipeline_cache
            .expect("`destroy_pipeline_cache` is not loaded");
        let _return = _function(
            self.handle,
            match pipeline_cache {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPipelineCacheData.html) · Function"]
    #[doc(alias = "vkGetPipelineCacheData")]
    pub unsafe fn get_pipeline_cache_data(
        &self,
        pipeline_cache: crate::vk1_0::PipelineCache,
        data_size: *mut usize,
        data: *mut std::ffi::c_void,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .get_pipeline_cache_data
            .expect("`get_pipeline_cache_data` is not loaded");
        let _return = _function(self.handle, pipeline_cache as _, data_size, data);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkMergePipelineCaches.html) · Function"]
    #[doc(alias = "vkMergePipelineCaches")]
    pub unsafe fn merge_pipeline_caches(
        &self,
        dst_cache: crate::vk1_0::PipelineCache,
        src_caches: &[crate::vk1_0::PipelineCache],
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .merge_pipeline_caches
            .expect("`merge_pipeline_caches` is not loaded");
        let src_cache_count = src_caches.len();
        let _return = _function(
            self.handle,
            dst_cache as _,
            src_cache_count as _,
            src_caches.as_ptr() as _,
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateGraphicsPipelines.html) · Function"]
    #[doc(alias = "vkCreateGraphicsPipelines")]
    pub unsafe fn create_graphics_pipelines(
        &self,
        pipeline_cache: Option<crate::vk1_0::PipelineCache>,
        create_infos: &[crate::vk1_0::GraphicsPipelineCreateInfoBuilder],
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> crate::utils::VulkanResult<Vec<crate::vk1_0::Pipeline>> {
        let _function = self
            .create_graphics_pipelines
            .expect("`create_graphics_pipelines` is not loaded");
        let create_info_count = create_infos.len();
        let mut pipelines = vec![Default::default(); create_info_count as _];
        let _return = _function(
            self.handle,
            match pipeline_cache {
                Some(v) => v,
                None => Default::default(),
            },
            create_info_count as _,
            create_infos.as_ptr() as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            pipelines.as_mut_ptr(),
        );
        crate::utils::VulkanResult::new(_return, pipelines)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateComputePipelines.html) · Function"]
    #[doc(alias = "vkCreateComputePipelines")]
    pub unsafe fn create_compute_pipelines(
        &self,
        pipeline_cache: Option<crate::vk1_0::PipelineCache>,
        create_infos: &[crate::vk1_0::ComputePipelineCreateInfoBuilder],
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> crate::utils::VulkanResult<Vec<crate::vk1_0::Pipeline>> {
        let _function = self
            .create_compute_pipelines
            .expect("`create_compute_pipelines` is not loaded");
        let create_info_count = create_infos.len();
        let mut pipelines = vec![Default::default(); create_info_count as _];
        let _return = _function(
            self.handle,
            match pipeline_cache {
                Some(v) => v,
                None => Default::default(),
            },
            create_info_count as _,
            create_infos.as_ptr() as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            pipelines.as_mut_ptr(),
        );
        crate::utils::VulkanResult::new(_return, pipelines)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyPipeline.html) · Function"]
    #[doc(alias = "vkDestroyPipeline")]
    pub unsafe fn destroy_pipeline(
        &self,
        pipeline: Option<crate::vk1_0::Pipeline>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_pipeline
            .expect("`destroy_pipeline` is not loaded");
        let _return = _function(
            self.handle,
            match pipeline {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreatePipelineLayout.html) · Function"]
    #[doc(alias = "vkCreatePipelineLayout")]
    pub unsafe fn create_pipeline_layout(
        &self,
        create_info: &crate::vk1_0::PipelineLayoutCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        pipeline_layout: Option<crate::vk1_0::PipelineLayout>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::PipelineLayout> {
        let _function = self
            .create_pipeline_layout
            .expect("`create_pipeline_layout` is not loaded");
        let mut pipeline_layout = match pipeline_layout {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut pipeline_layout,
        );
        crate::utils::VulkanResult::new(_return, pipeline_layout)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyPipelineLayout.html) · Function"]
    #[doc(alias = "vkDestroyPipelineLayout")]
    pub unsafe fn destroy_pipeline_layout(
        &self,
        pipeline_layout: Option<crate::vk1_0::PipelineLayout>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_pipeline_layout
            .expect("`destroy_pipeline_layout` is not loaded");
        let _return = _function(
            self.handle,
            match pipeline_layout {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateSampler.html) · Function"]
    #[doc(alias = "vkCreateSampler")]
    pub unsafe fn create_sampler(
        &self,
        create_info: &crate::vk1_0::SamplerCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        sampler: Option<crate::vk1_0::Sampler>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::Sampler> {
        let _function = self.create_sampler.expect("`create_sampler` is not loaded");
        let mut sampler = match sampler {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut sampler,
        );
        crate::utils::VulkanResult::new(_return, sampler)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroySampler.html) · Function"]
    #[doc(alias = "vkDestroySampler")]
    pub unsafe fn destroy_sampler(
        &self,
        sampler: Option<crate::vk1_0::Sampler>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_sampler
            .expect("`destroy_sampler` is not loaded");
        let _return = _function(
            self.handle,
            match sampler {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDescriptorSetLayout.html) · Function"]
    #[doc(alias = "vkCreateDescriptorSetLayout")]
    pub unsafe fn create_descriptor_set_layout(
        &self,
        create_info: &crate::vk1_0::DescriptorSetLayoutCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        set_layout: Option<crate::vk1_0::DescriptorSetLayout>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::DescriptorSetLayout> {
        let _function = self
            .create_descriptor_set_layout
            .expect("`create_descriptor_set_layout` is not loaded");
        let mut set_layout = match set_layout {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut set_layout,
        );
        crate::utils::VulkanResult::new(_return, set_layout)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDescriptorSetLayout.html) · Function"]
    #[doc(alias = "vkDestroyDescriptorSetLayout")]
    pub unsafe fn destroy_descriptor_set_layout(
        &self,
        descriptor_set_layout: Option<crate::vk1_0::DescriptorSetLayout>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_descriptor_set_layout
            .expect("`destroy_descriptor_set_layout` is not loaded");
        let _return = _function(
            self.handle,
            match descriptor_set_layout {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDescriptorPool.html) · Function"]
    #[doc(alias = "vkCreateDescriptorPool")]
    pub unsafe fn create_descriptor_pool(
        &self,
        create_info: &crate::vk1_0::DescriptorPoolCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        descriptor_pool: Option<crate::vk1_0::DescriptorPool>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::DescriptorPool> {
        let _function = self
            .create_descriptor_pool
            .expect("`create_descriptor_pool` is not loaded");
        let mut descriptor_pool = match descriptor_pool {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut descriptor_pool,
        );
        crate::utils::VulkanResult::new(_return, descriptor_pool)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDescriptorPool.html) · Function"]
    #[doc(alias = "vkDestroyDescriptorPool")]
    pub unsafe fn destroy_descriptor_pool(
        &self,
        descriptor_pool: Option<crate::vk1_0::DescriptorPool>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_descriptor_pool
            .expect("`destroy_descriptor_pool` is not loaded");
        let _return = _function(
            self.handle,
            match descriptor_pool {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetDescriptorPool.html) · Function"]
    #[doc(alias = "vkResetDescriptorPool")]
    pub unsafe fn reset_descriptor_pool(
        &self,
        descriptor_pool: crate::vk1_0::DescriptorPool,
        flags: Option<crate::vk1_0::DescriptorPoolResetFlags>,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .reset_descriptor_pool
            .expect("`reset_descriptor_pool` is not loaded");
        let _return = _function(
            self.handle,
            descriptor_pool as _,
            match flags {
                Some(v) => v,
                None => Default::default(),
            },
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkAllocateDescriptorSets.html) · Function"]
    #[doc(alias = "vkAllocateDescriptorSets")]
    pub unsafe fn allocate_descriptor_sets(
        &self,
        allocate_info: &crate::vk1_0::DescriptorSetAllocateInfo,
    ) -> crate::utils::VulkanResult<Vec<crate::vk1_0::DescriptorSet>> {
        let _function = self
            .allocate_descriptor_sets
            .expect("`allocate_descriptor_sets` is not loaded");
        let mut descriptor_sets = vec![Default::default(); allocate_info.descriptor_set_count as _];
        let _return = _function(
            self.handle,
            allocate_info as _,
            descriptor_sets.as_mut_ptr(),
        );
        crate::utils::VulkanResult::new(_return, descriptor_sets)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFreeDescriptorSets.html) · Function"]
    #[doc(alias = "vkFreeDescriptorSets")]
    pub unsafe fn free_descriptor_sets(
        &self,
        descriptor_pool: crate::vk1_0::DescriptorPool,
        descriptor_sets: &[crate::vk1_0::DescriptorSet],
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .free_descriptor_sets
            .expect("`free_descriptor_sets` is not loaded");
        let descriptor_set_count = descriptor_sets.len();
        let _return = _function(
            self.handle,
            descriptor_pool as _,
            descriptor_set_count as _,
            descriptor_sets.as_ptr() as _,
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkUpdateDescriptorSets.html) · Function"]
    #[doc(alias = "vkUpdateDescriptorSets")]
    pub unsafe fn update_descriptor_sets(
        &self,
        descriptor_writes: &[crate::vk1_0::WriteDescriptorSetBuilder],
        descriptor_copies: &[crate::vk1_0::CopyDescriptorSetBuilder],
    ) -> () {
        let _function = self
            .update_descriptor_sets
            .expect("`update_descriptor_sets` is not loaded");
        let descriptor_write_count = descriptor_writes.len();
        let descriptor_copy_count = descriptor_copies.len();
        let _return = _function(
            self.handle,
            descriptor_write_count as _,
            descriptor_writes.as_ptr() as _,
            descriptor_copy_count as _,
            descriptor_copies.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateFramebuffer.html) · Function"]
    #[doc(alias = "vkCreateFramebuffer")]
    pub unsafe fn create_framebuffer(
        &self,
        create_info: &crate::vk1_0::FramebufferCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        framebuffer: Option<crate::vk1_0::Framebuffer>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::Framebuffer> {
        let _function = self
            .create_framebuffer
            .expect("`create_framebuffer` is not loaded");
        let mut framebuffer = match framebuffer {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut framebuffer,
        );
        crate::utils::VulkanResult::new(_return, framebuffer)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyFramebuffer.html) · Function"]
    #[doc(alias = "vkDestroyFramebuffer")]
    pub unsafe fn destroy_framebuffer(
        &self,
        framebuffer: Option<crate::vk1_0::Framebuffer>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_framebuffer
            .expect("`destroy_framebuffer` is not loaded");
        let _return = _function(
            self.handle,
            match framebuffer {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateRenderPass.html) · Function"]
    #[doc(alias = "vkCreateRenderPass")]
    pub unsafe fn create_render_pass(
        &self,
        create_info: &crate::vk1_0::RenderPassCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        render_pass: Option<crate::vk1_0::RenderPass>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::RenderPass> {
        let _function = self
            .create_render_pass
            .expect("`create_render_pass` is not loaded");
        let mut render_pass = match render_pass {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut render_pass,
        );
        crate::utils::VulkanResult::new(_return, render_pass)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyRenderPass.html) · Function"]
    #[doc(alias = "vkDestroyRenderPass")]
    pub unsafe fn destroy_render_pass(
        &self,
        render_pass: Option<crate::vk1_0::RenderPass>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_render_pass
            .expect("`destroy_render_pass` is not loaded");
        let _return = _function(
            self.handle,
            match render_pass {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetRenderAreaGranularity.html) · Function"]
    #[doc(alias = "vkGetRenderAreaGranularity")]
    pub unsafe fn get_render_area_granularity(
        &self,
        render_pass: crate::vk1_0::RenderPass,
        granularity: Option<crate::vk1_0::Extent2D>,
    ) -> crate::vk1_0::Extent2D {
        let _function = self
            .get_render_area_granularity
            .expect("`get_render_area_granularity` is not loaded");
        let mut granularity = match granularity {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(self.handle, render_pass as _, &mut granularity);
        granularity
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateCommandPool.html) · Function"]
    #[doc(alias = "vkCreateCommandPool")]
    pub unsafe fn create_command_pool(
        &self,
        create_info: &crate::vk1_0::CommandPoolCreateInfo,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
        command_pool: Option<crate::vk1_0::CommandPool>,
    ) -> crate::utils::VulkanResult<crate::vk1_0::CommandPool> {
        let _function = self
            .create_command_pool
            .expect("`create_command_pool` is not loaded");
        let mut command_pool = match command_pool {
            Some(v) => v,
            None => Default::default(),
        };
        let _return = _function(
            self.handle,
            create_info as _,
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
            &mut command_pool,
        );
        crate::utils::VulkanResult::new(_return, command_pool)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyCommandPool.html) · Function"]
    #[doc(alias = "vkDestroyCommandPool")]
    pub unsafe fn destroy_command_pool(
        &self,
        command_pool: Option<crate::vk1_0::CommandPool>,
        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
    ) -> () {
        let _function = self
            .destroy_command_pool
            .expect("`destroy_command_pool` is not loaded");
        let _return = _function(
            self.handle,
            match command_pool {
                Some(v) => v,
                None => Default::default(),
            },
            match allocator {
                Some(v) => v,
                None => std::ptr::null(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetCommandPool.html) · Function"]
    #[doc(alias = "vkResetCommandPool")]
    pub unsafe fn reset_command_pool(
        &self,
        command_pool: crate::vk1_0::CommandPool,
        flags: Option<crate::vk1_0::CommandPoolResetFlags>,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .reset_command_pool
            .expect("`reset_command_pool` is not loaded");
        let _return = _function(
            self.handle,
            command_pool as _,
            match flags {
                Some(v) => v,
                None => Default::default(),
            },
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkAllocateCommandBuffers.html) · Function"]
    #[doc(alias = "vkAllocateCommandBuffers")]
    pub unsafe fn allocate_command_buffers(
        &self,
        allocate_info: &crate::vk1_0::CommandBufferAllocateInfo,
    ) -> crate::utils::VulkanResult<Vec<crate::vk1_0::CommandBuffer>> {
        let _function = self
            .allocate_command_buffers
            .expect("`allocate_command_buffers` is not loaded");
        let mut command_buffers = vec![Default::default(); allocate_info.command_buffer_count as _];
        let _return = _function(
            self.handle,
            allocate_info as _,
            command_buffers.as_mut_ptr(),
        );
        crate::utils::VulkanResult::new(_return, command_buffers)
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkFreeCommandBuffers.html) · Function"]
    #[doc(alias = "vkFreeCommandBuffers")]
    pub unsafe fn free_command_buffers(
        &self,
        command_pool: crate::vk1_0::CommandPool,
        command_buffers: &[crate::vk1_0::CommandBuffer],
    ) -> () {
        let _function = self
            .free_command_buffers
            .expect("`free_command_buffers` is not loaded");
        let command_buffer_count = command_buffers.len();
        let _return = _function(
            self.handle,
            command_pool as _,
            command_buffer_count as _,
            command_buffers.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBeginCommandBuffer.html) · Function"]
    #[doc(alias = "vkBeginCommandBuffer")]
    pub unsafe fn begin_command_buffer(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        begin_info: &crate::vk1_0::CommandBufferBeginInfo,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .begin_command_buffer
            .expect("`begin_command_buffer` is not loaded");
        let _return = _function(command_buffer as _, begin_info as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkEndCommandBuffer.html) · Function"]
    #[doc(alias = "vkEndCommandBuffer")]
    pub unsafe fn end_command_buffer(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .end_command_buffer
            .expect("`end_command_buffer` is not loaded");
        let _return = _function(command_buffer as _);
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkResetCommandBuffer.html) · Function"]
    #[doc(alias = "vkResetCommandBuffer")]
    pub unsafe fn reset_command_buffer(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        flags: Option<crate::vk1_0::CommandBufferResetFlags>,
    ) -> crate::utils::VulkanResult<()> {
        let _function = self
            .reset_command_buffer
            .expect("`reset_command_buffer` is not loaded");
        let _return = _function(
            command_buffer as _,
            match flags {
                Some(v) => v,
                None => Default::default(),
            },
        );
        crate::utils::VulkanResult::new(_return, ())
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBindPipeline.html) · Function"]
    #[doc(alias = "vkCmdBindPipeline")]
    pub unsafe fn cmd_bind_pipeline(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
        pipeline: crate::vk1_0::Pipeline,
    ) -> () {
        let _function = self
            .cmd_bind_pipeline
            .expect("`cmd_bind_pipeline` is not loaded");
        let _return = _function(command_buffer as _, pipeline_bind_point as _, pipeline as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetViewport.html) · Function"]
    #[doc(alias = "vkCmdSetViewport")]
    pub unsafe fn cmd_set_viewport(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        first_viewport: u32,
        viewports: &[crate::vk1_0::ViewportBuilder],
    ) -> () {
        let _function = self
            .cmd_set_viewport
            .expect("`cmd_set_viewport` is not loaded");
        let viewport_count = viewports.len();
        let _return = _function(
            command_buffer as _,
            first_viewport as _,
            viewport_count as _,
            viewports.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetScissor.html) · Function"]
    #[doc(alias = "vkCmdSetScissor")]
    pub unsafe fn cmd_set_scissor(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        first_scissor: u32,
        scissors: &[crate::vk1_0::Rect2DBuilder],
    ) -> () {
        let _function = self
            .cmd_set_scissor
            .expect("`cmd_set_scissor` is not loaded");
        let scissor_count = scissors.len();
        let _return = _function(
            command_buffer as _,
            first_scissor as _,
            scissor_count as _,
            scissors.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetLineWidth.html) · Function"]
    #[doc(alias = "vkCmdSetLineWidth")]
    pub unsafe fn cmd_set_line_width(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        line_width: std::os::raw::c_float,
    ) -> () {
        let _function = self
            .cmd_set_line_width
            .expect("`cmd_set_line_width` is not loaded");
        let _return = _function(command_buffer as _, line_width as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetDepthBias.html) · Function"]
    #[doc(alias = "vkCmdSetDepthBias")]
    pub unsafe fn cmd_set_depth_bias(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        depth_bias_constant_factor: std::os::raw::c_float,
        depth_bias_clamp: std::os::raw::c_float,
        depth_bias_slope_factor: std::os::raw::c_float,
    ) -> () {
        let _function = self
            .cmd_set_depth_bias
            .expect("`cmd_set_depth_bias` is not loaded");
        let _return = _function(
            command_buffer as _,
            depth_bias_constant_factor as _,
            depth_bias_clamp as _,
            depth_bias_slope_factor as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetBlendConstants.html) · Function"]
    #[doc(alias = "vkCmdSetBlendConstants")]
    pub unsafe fn cmd_set_blend_constants(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        blend_constants: [std::os::raw::c_float; 4],
    ) -> () {
        let _function = self
            .cmd_set_blend_constants
            .expect("`cmd_set_blend_constants` is not loaded");
        let _return = _function(command_buffer as _, blend_constants as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetDepthBounds.html) · Function"]
    #[doc(alias = "vkCmdSetDepthBounds")]
    pub unsafe fn cmd_set_depth_bounds(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        min_depth_bounds: std::os::raw::c_float,
        max_depth_bounds: std::os::raw::c_float,
    ) -> () {
        let _function = self
            .cmd_set_depth_bounds
            .expect("`cmd_set_depth_bounds` is not loaded");
        let _return = _function(
            command_buffer as _,
            min_depth_bounds as _,
            max_depth_bounds as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetStencilCompareMask.html) · Function"]
    #[doc(alias = "vkCmdSetStencilCompareMask")]
    pub unsafe fn cmd_set_stencil_compare_mask(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        face_mask: crate::vk1_0::StencilFaceFlags,
        compare_mask: u32,
    ) -> () {
        let _function = self
            .cmd_set_stencil_compare_mask
            .expect("`cmd_set_stencil_compare_mask` is not loaded");
        let _return = _function(command_buffer as _, face_mask as _, compare_mask as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetStencilWriteMask.html) · Function"]
    #[doc(alias = "vkCmdSetStencilWriteMask")]
    pub unsafe fn cmd_set_stencil_write_mask(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        face_mask: crate::vk1_0::StencilFaceFlags,
        write_mask: u32,
    ) -> () {
        let _function = self
            .cmd_set_stencil_write_mask
            .expect("`cmd_set_stencil_write_mask` is not loaded");
        let _return = _function(command_buffer as _, face_mask as _, write_mask as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetStencilReference.html) · Function"]
    #[doc(alias = "vkCmdSetStencilReference")]
    pub unsafe fn cmd_set_stencil_reference(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        face_mask: crate::vk1_0::StencilFaceFlags,
        reference: u32,
    ) -> () {
        let _function = self
            .cmd_set_stencil_reference
            .expect("`cmd_set_stencil_reference` is not loaded");
        let _return = _function(command_buffer as _, face_mask as _, reference as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBindDescriptorSets.html) · Function"]
    #[doc(alias = "vkCmdBindDescriptorSets")]
    pub unsafe fn cmd_bind_descriptor_sets(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
        layout: crate::vk1_0::PipelineLayout,
        first_set: u32,
        descriptor_sets: &[crate::vk1_0::DescriptorSet],
        dynamic_offsets: &[u32],
    ) -> () {
        let _function = self
            .cmd_bind_descriptor_sets
            .expect("`cmd_bind_descriptor_sets` is not loaded");
        let descriptor_set_count = descriptor_sets.len();
        let dynamic_offset_count = dynamic_offsets.len();
        let _return = _function(
            command_buffer as _,
            pipeline_bind_point as _,
            layout as _,
            first_set as _,
            descriptor_set_count as _,
            descriptor_sets.as_ptr() as _,
            dynamic_offset_count as _,
            dynamic_offsets.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBindIndexBuffer.html) · Function"]
    #[doc(alias = "vkCmdBindIndexBuffer")]
    pub unsafe fn cmd_bind_index_buffer(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        buffer: crate::vk1_0::Buffer,
        offset: crate::vk1_0::DeviceSize,
        index_type: crate::vk1_0::IndexType,
    ) -> () {
        let _function = self
            .cmd_bind_index_buffer
            .expect("`cmd_bind_index_buffer` is not loaded");
        let _return = _function(
            command_buffer as _,
            buffer as _,
            offset as _,
            index_type as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBindVertexBuffers.html) · Function"]
    #[doc(alias = "vkCmdBindVertexBuffers")]
    pub unsafe fn cmd_bind_vertex_buffers(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        first_binding: u32,
        buffers: &[crate::vk1_0::Buffer],
        offsets: &[crate::vk1_0::DeviceSize],
    ) -> () {
        let _function = self
            .cmd_bind_vertex_buffers
            .expect("`cmd_bind_vertex_buffers` is not loaded");
        let binding_count = buffers.len().min(offsets.len());
        let _return = _function(
            command_buffer as _,
            first_binding as _,
            binding_count as _,
            buffers.as_ptr() as _,
            offsets.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDraw.html) · Function"]
    #[doc(alias = "vkCmdDraw")]
    pub unsafe fn cmd_draw(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        vertex_count: u32,
        instance_count: u32,
        first_vertex: u32,
        first_instance: u32,
    ) -> () {
        let _function = self.cmd_draw.expect("`cmd_draw` is not loaded");
        let _return = _function(
            command_buffer as _,
            vertex_count as _,
            instance_count as _,
            first_vertex as _,
            first_instance as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawIndexed.html) · Function"]
    #[doc(alias = "vkCmdDrawIndexed")]
    pub unsafe fn cmd_draw_indexed(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        index_count: u32,
        instance_count: u32,
        first_index: u32,
        vertex_offset: i32,
        first_instance: u32,
    ) -> () {
        let _function = self
            .cmd_draw_indexed
            .expect("`cmd_draw_indexed` is not loaded");
        let _return = _function(
            command_buffer as _,
            index_count as _,
            instance_count as _,
            first_index as _,
            vertex_offset as _,
            first_instance as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawIndirect.html) · Function"]
    #[doc(alias = "vkCmdDrawIndirect")]
    pub unsafe fn cmd_draw_indirect(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        buffer: crate::vk1_0::Buffer,
        offset: crate::vk1_0::DeviceSize,
        draw_count: u32,
        stride: u32,
    ) -> () {
        let _function = self
            .cmd_draw_indirect
            .expect("`cmd_draw_indirect` is not loaded");
        let _return = _function(
            command_buffer as _,
            buffer as _,
            offset as _,
            draw_count as _,
            stride as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawIndexedIndirect.html) · Function"]
    #[doc(alias = "vkCmdDrawIndexedIndirect")]
    pub unsafe fn cmd_draw_indexed_indirect(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        buffer: crate::vk1_0::Buffer,
        offset: crate::vk1_0::DeviceSize,
        draw_count: u32,
        stride: u32,
    ) -> () {
        let _function = self
            .cmd_draw_indexed_indirect
            .expect("`cmd_draw_indexed_indirect` is not loaded");
        let _return = _function(
            command_buffer as _,
            buffer as _,
            offset as _,
            draw_count as _,
            stride as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDispatch.html) · Function"]
    #[doc(alias = "vkCmdDispatch")]
    pub unsafe fn cmd_dispatch(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        group_count_x: u32,
        group_count_y: u32,
        group_count_z: u32,
    ) -> () {
        let _function = self.cmd_dispatch.expect("`cmd_dispatch` is not loaded");
        let _return = _function(
            command_buffer as _,
            group_count_x as _,
            group_count_y as _,
            group_count_z as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDispatchIndirect.html) · Function"]
    #[doc(alias = "vkCmdDispatchIndirect")]
    pub unsafe fn cmd_dispatch_indirect(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        buffer: crate::vk1_0::Buffer,
        offset: crate::vk1_0::DeviceSize,
    ) -> () {
        let _function = self
            .cmd_dispatch_indirect
            .expect("`cmd_dispatch_indirect` is not loaded");
        let _return = _function(command_buffer as _, buffer as _, offset as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyBuffer.html) · Function"]
    #[doc(alias = "vkCmdCopyBuffer")]
    pub unsafe fn cmd_copy_buffer(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        src_buffer: crate::vk1_0::Buffer,
        dst_buffer: crate::vk1_0::Buffer,
        regions: &[crate::vk1_0::BufferCopyBuilder],
    ) -> () {
        let _function = self
            .cmd_copy_buffer
            .expect("`cmd_copy_buffer` is not loaded");
        let region_count = regions.len();
        let _return = _function(
            command_buffer as _,
            src_buffer as _,
            dst_buffer as _,
            region_count as _,
            regions.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyImage.html) · Function"]
    #[doc(alias = "vkCmdCopyImage")]
    pub unsafe fn cmd_copy_image(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        src_image: crate::vk1_0::Image,
        src_image_layout: crate::vk1_0::ImageLayout,
        dst_image: crate::vk1_0::Image,
        dst_image_layout: crate::vk1_0::ImageLayout,
        regions: &[crate::vk1_0::ImageCopyBuilder],
    ) -> () {
        let _function = self.cmd_copy_image.expect("`cmd_copy_image` is not loaded");
        let region_count = regions.len();
        let _return = _function(
            command_buffer as _,
            src_image as _,
            src_image_layout as _,
            dst_image as _,
            dst_image_layout as _,
            region_count as _,
            regions.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBlitImage.html) · Function"]
    #[doc(alias = "vkCmdBlitImage")]
    pub unsafe fn cmd_blit_image(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        src_image: crate::vk1_0::Image,
        src_image_layout: crate::vk1_0::ImageLayout,
        dst_image: crate::vk1_0::Image,
        dst_image_layout: crate::vk1_0::ImageLayout,
        regions: &[crate::vk1_0::ImageBlitBuilder],
        filter: crate::vk1_0::Filter,
    ) -> () {
        let _function = self.cmd_blit_image.expect("`cmd_blit_image` is not loaded");
        let region_count = regions.len();
        let _return = _function(
            command_buffer as _,
            src_image as _,
            src_image_layout as _,
            dst_image as _,
            dst_image_layout as _,
            region_count as _,
            regions.as_ptr() as _,
            filter as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyBufferToImage.html) · Function"]
    #[doc(alias = "vkCmdCopyBufferToImage")]
    pub unsafe fn cmd_copy_buffer_to_image(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        src_buffer: crate::vk1_0::Buffer,
        dst_image: crate::vk1_0::Image,
        dst_image_layout: crate::vk1_0::ImageLayout,
        regions: &[crate::vk1_0::BufferImageCopyBuilder],
    ) -> () {
        let _function = self
            .cmd_copy_buffer_to_image
            .expect("`cmd_copy_buffer_to_image` is not loaded");
        let region_count = regions.len();
        let _return = _function(
            command_buffer as _,
            src_buffer as _,
            dst_image as _,
            dst_image_layout as _,
            region_count as _,
            regions.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyImageToBuffer.html) · Function"]
    #[doc(alias = "vkCmdCopyImageToBuffer")]
    pub unsafe fn cmd_copy_image_to_buffer(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        src_image: crate::vk1_0::Image,
        src_image_layout: crate::vk1_0::ImageLayout,
        dst_buffer: crate::vk1_0::Buffer,
        regions: &[crate::vk1_0::BufferImageCopyBuilder],
    ) -> () {
        let _function = self
            .cmd_copy_image_to_buffer
            .expect("`cmd_copy_image_to_buffer` is not loaded");
        let region_count = regions.len();
        let _return = _function(
            command_buffer as _,
            src_image as _,
            src_image_layout as _,
            dst_buffer as _,
            region_count as _,
            regions.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdUpdateBuffer.html) · Function"]
    #[doc(alias = "vkCmdUpdateBuffer")]
    pub unsafe fn cmd_update_buffer(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        dst_buffer: crate::vk1_0::Buffer,
        dst_offset: crate::vk1_0::DeviceSize,
        data_size: crate::vk1_0::DeviceSize,
        data: *const std::ffi::c_void,
    ) -> () {
        let _function = self
            .cmd_update_buffer
            .expect("`cmd_update_buffer` is not loaded");
        let _return = _function(
            command_buffer as _,
            dst_buffer as _,
            dst_offset as _,
            data_size,
            data,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdFillBuffer.html) · Function"]
    #[doc(alias = "vkCmdFillBuffer")]
    pub unsafe fn cmd_fill_buffer(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        dst_buffer: crate::vk1_0::Buffer,
        dst_offset: crate::vk1_0::DeviceSize,
        size: crate::vk1_0::DeviceSize,
        data: u32,
    ) -> () {
        let _function = self
            .cmd_fill_buffer
            .expect("`cmd_fill_buffer` is not loaded");
        let _return = _function(
            command_buffer as _,
            dst_buffer as _,
            dst_offset as _,
            size as _,
            data as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdClearColorImage.html) · Function"]
    #[doc(alias = "vkCmdClearColorImage")]
    pub unsafe fn cmd_clear_color_image(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        image: crate::vk1_0::Image,
        image_layout: crate::vk1_0::ImageLayout,
        color: &crate::vk1_0::ClearColorValue,
        ranges: &[crate::vk1_0::ImageSubresourceRangeBuilder],
    ) -> () {
        let _function = self
            .cmd_clear_color_image
            .expect("`cmd_clear_color_image` is not loaded");
        let range_count = ranges.len();
        let _return = _function(
            command_buffer as _,
            image as _,
            image_layout as _,
            color as _,
            range_count as _,
            ranges.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdClearDepthStencilImage.html) · Function"]
    #[doc(alias = "vkCmdClearDepthStencilImage")]
    pub unsafe fn cmd_clear_depth_stencil_image(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        image: crate::vk1_0::Image,
        image_layout: crate::vk1_0::ImageLayout,
        depth_stencil: &crate::vk1_0::ClearDepthStencilValue,
        ranges: &[crate::vk1_0::ImageSubresourceRangeBuilder],
    ) -> () {
        let _function = self
            .cmd_clear_depth_stencil_image
            .expect("`cmd_clear_depth_stencil_image` is not loaded");
        let range_count = ranges.len();
        let _return = _function(
            command_buffer as _,
            image as _,
            image_layout as _,
            depth_stencil as _,
            range_count as _,
            ranges.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdClearAttachments.html) · Function"]
    #[doc(alias = "vkCmdClearAttachments")]
    pub unsafe fn cmd_clear_attachments(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        attachments: &[crate::vk1_0::ClearAttachmentBuilder],
        rects: &[crate::vk1_0::ClearRectBuilder],
    ) -> () {
        let _function = self
            .cmd_clear_attachments
            .expect("`cmd_clear_attachments` is not loaded");
        let attachment_count = attachments.len();
        let rect_count = rects.len();
        let _return = _function(
            command_buffer as _,
            attachment_count as _,
            attachments.as_ptr() as _,
            rect_count as _,
            rects.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdResolveImage.html) · Function"]
    #[doc(alias = "vkCmdResolveImage")]
    pub unsafe fn cmd_resolve_image(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        src_image: crate::vk1_0::Image,
        src_image_layout: crate::vk1_0::ImageLayout,
        dst_image: crate::vk1_0::Image,
        dst_image_layout: crate::vk1_0::ImageLayout,
        regions: &[crate::vk1_0::ImageResolveBuilder],
    ) -> () {
        let _function = self
            .cmd_resolve_image
            .expect("`cmd_resolve_image` is not loaded");
        let region_count = regions.len();
        let _return = _function(
            command_buffer as _,
            src_image as _,
            src_image_layout as _,
            dst_image as _,
            dst_image_layout as _,
            region_count as _,
            regions.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetEvent.html) · Function"]
    #[doc(alias = "vkCmdSetEvent")]
    pub unsafe fn cmd_set_event(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        event: crate::vk1_0::Event,
        stage_mask: crate::vk1_0::PipelineStageFlags,
    ) -> () {
        let _function = self.cmd_set_event.expect("`cmd_set_event` is not loaded");
        let _return = _function(command_buffer as _, event as _, stage_mask as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdResetEvent.html) · Function"]
    #[doc(alias = "vkCmdResetEvent")]
    pub unsafe fn cmd_reset_event(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        event: crate::vk1_0::Event,
        stage_mask: crate::vk1_0::PipelineStageFlags,
    ) -> () {
        let _function = self
            .cmd_reset_event
            .expect("`cmd_reset_event` is not loaded");
        let _return = _function(command_buffer as _, event as _, stage_mask as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdWaitEvents.html) · Function"]
    #[doc(alias = "vkCmdWaitEvents")]
    pub unsafe fn cmd_wait_events(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        events: &[crate::vk1_0::Event],
        src_stage_mask: crate::vk1_0::PipelineStageFlags,
        dst_stage_mask: crate::vk1_0::PipelineStageFlags,
        memory_barriers: &[crate::vk1_0::MemoryBarrierBuilder],
        buffer_memory_barriers: &[crate::vk1_0::BufferMemoryBarrierBuilder],
        image_memory_barriers: &[crate::vk1_0::ImageMemoryBarrierBuilder],
    ) -> () {
        let _function = self
            .cmd_wait_events
            .expect("`cmd_wait_events` is not loaded");
        let event_count = events.len();
        let memory_barrier_count = memory_barriers.len();
        let buffer_memory_barrier_count = buffer_memory_barriers.len();
        let image_memory_barrier_count = image_memory_barriers.len();
        let _return = _function(
            command_buffer as _,
            event_count as _,
            events.as_ptr() as _,
            src_stage_mask as _,
            dst_stage_mask as _,
            memory_barrier_count as _,
            memory_barriers.as_ptr() as _,
            buffer_memory_barrier_count as _,
            buffer_memory_barriers.as_ptr() as _,
            image_memory_barrier_count as _,
            image_memory_barriers.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdPipelineBarrier.html) · Function"]
    #[doc(alias = "vkCmdPipelineBarrier")]
    pub unsafe fn cmd_pipeline_barrier(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        src_stage_mask: crate::vk1_0::PipelineStageFlags,
        dst_stage_mask: crate::vk1_0::PipelineStageFlags,
        dependency_flags: Option<crate::vk1_0::DependencyFlags>,
        memory_barriers: &[crate::vk1_0::MemoryBarrierBuilder],
        buffer_memory_barriers: &[crate::vk1_0::BufferMemoryBarrierBuilder],
        image_memory_barriers: &[crate::vk1_0::ImageMemoryBarrierBuilder],
    ) -> () {
        let _function = self
            .cmd_pipeline_barrier
            .expect("`cmd_pipeline_barrier` is not loaded");
        let memory_barrier_count = memory_barriers.len();
        let buffer_memory_barrier_count = buffer_memory_barriers.len();
        let image_memory_barrier_count = image_memory_barriers.len();
        let _return = _function(
            command_buffer as _,
            src_stage_mask as _,
            dst_stage_mask as _,
            match dependency_flags {
                Some(v) => v,
                None => Default::default(),
            },
            memory_barrier_count as _,
            memory_barriers.as_ptr() as _,
            buffer_memory_barrier_count as _,
            buffer_memory_barriers.as_ptr() as _,
            image_memory_barrier_count as _,
            image_memory_barriers.as_ptr() as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBeginQuery.html) · Function"]
    #[doc(alias = "vkCmdBeginQuery")]
    pub unsafe fn cmd_begin_query(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        query_pool: crate::vk1_0::QueryPool,
        query: u32,
        flags: Option<crate::vk1_0::QueryControlFlags>,
    ) -> () {
        let _function = self
            .cmd_begin_query
            .expect("`cmd_begin_query` is not loaded");
        let _return = _function(
            command_buffer as _,
            query_pool as _,
            query as _,
            match flags {
                Some(v) => v,
                None => Default::default(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdEndQuery.html) · Function"]
    #[doc(alias = "vkCmdEndQuery")]
    pub unsafe fn cmd_end_query(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        query_pool: crate::vk1_0::QueryPool,
        query: u32,
    ) -> () {
        let _function = self.cmd_end_query.expect("`cmd_end_query` is not loaded");
        let _return = _function(command_buffer as _, query_pool as _, query as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdResetQueryPool.html) · Function"]
    #[doc(alias = "vkCmdResetQueryPool")]
    pub unsafe fn cmd_reset_query_pool(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        query_pool: crate::vk1_0::QueryPool,
        first_query: u32,
        query_count: u32,
    ) -> () {
        let _function = self
            .cmd_reset_query_pool
            .expect("`cmd_reset_query_pool` is not loaded");
        let _return = _function(
            command_buffer as _,
            query_pool as _,
            first_query as _,
            query_count as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdWriteTimestamp.html) · Function"]
    #[doc(alias = "vkCmdWriteTimestamp")]
    pub unsafe fn cmd_write_timestamp(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        pipeline_stage: crate::vk1_0::PipelineStageFlagBits,
        query_pool: crate::vk1_0::QueryPool,
        query: u32,
    ) -> () {
        let _function = self
            .cmd_write_timestamp
            .expect("`cmd_write_timestamp` is not loaded");
        let _return = _function(
            command_buffer as _,
            pipeline_stage as _,
            query_pool as _,
            query as _,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyQueryPoolResults.html) · Function"]
    #[doc(alias = "vkCmdCopyQueryPoolResults")]
    pub unsafe fn cmd_copy_query_pool_results(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        query_pool: crate::vk1_0::QueryPool,
        first_query: u32,
        query_count: u32,
        dst_buffer: crate::vk1_0::Buffer,
        dst_offset: crate::vk1_0::DeviceSize,
        stride: crate::vk1_0::DeviceSize,
        flags: Option<crate::vk1_0::QueryResultFlags>,
    ) -> () {
        let _function = self
            .cmd_copy_query_pool_results
            .expect("`cmd_copy_query_pool_results` is not loaded");
        let _return = _function(
            command_buffer as _,
            query_pool as _,
            first_query as _,
            query_count as _,
            dst_buffer as _,
            dst_offset as _,
            stride as _,
            match flags {
                Some(v) => v,
                None => Default::default(),
            },
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdPushConstants.html) · Function"]
    #[doc(alias = "vkCmdPushConstants")]
    pub unsafe fn cmd_push_constants(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        layout: crate::vk1_0::PipelineLayout,
        stage_flags: crate::vk1_0::ShaderStageFlags,
        offset: u32,
        size: u32,
        values: *const std::ffi::c_void,
    ) -> () {
        let _function = self
            .cmd_push_constants
            .expect("`cmd_push_constants` is not loaded");
        let _return = _function(
            command_buffer as _,
            layout as _,
            stage_flags as _,
            offset as _,
            size,
            values,
        );
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBeginRenderPass.html) · Function"]
    #[doc(alias = "vkCmdBeginRenderPass")]
    pub unsafe fn cmd_begin_render_pass(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        render_pass_begin: &crate::vk1_0::RenderPassBeginInfo,
        contents: crate::vk1_0::SubpassContents,
    ) -> () {
        let _function = self
            .cmd_begin_render_pass
            .expect("`cmd_begin_render_pass` is not loaded");
        let _return = _function(command_buffer as _, render_pass_begin as _, contents as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdNextSubpass.html) · Function"]
    #[doc(alias = "vkCmdNextSubpass")]
    pub unsafe fn cmd_next_subpass(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        contents: crate::vk1_0::SubpassContents,
    ) -> () {
        let _function = self
            .cmd_next_subpass
            .expect("`cmd_next_subpass` is not loaded");
        let _return = _function(command_buffer as _, contents as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdEndRenderPass.html) · Function"]
    #[doc(alias = "vkCmdEndRenderPass")]
    pub unsafe fn cmd_end_render_pass(&self, command_buffer: crate::vk1_0::CommandBuffer) -> () {
        let _function = self
            .cmd_end_render_pass
            .expect("`cmd_end_render_pass` is not loaded");
        let _return = _function(command_buffer as _);
        ()
    }
    #[inline]
    #[doc = "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdExecuteCommands.html) · Function"]
    #[doc(alias = "vkCmdExecuteCommands")]
    pub unsafe fn cmd_execute_commands(
        &self,
        command_buffer: crate::vk1_0::CommandBuffer,
        command_buffers: &[crate::vk1_0::CommandBuffer],
    ) -> () {
        let _function = self
            .cmd_execute_commands
            .expect("`cmd_execute_commands` is not loaded");
        let command_buffer_count = command_buffers.len();
        let _return = _function(
            command_buffer as _,
            command_buffer_count as _,
            command_buffers.as_ptr() as _,
        );
        ()
    }
}
