#ifndef VULKAN_BETA_H_
#define VULKAN_BETA_H_ 1

/*
** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/

/*
** This header is generated from the Khronos Vulkan XML API Registry.
**
*/

#ifdef __cplusplus
extern "C" {
#endif

#define VK_KHR_video_queue 1
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR)
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR)
#define VK_KHR_VIDEO_QUEUE_SPEC_VERSION 3
#define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue"

typedef enum VkQueryResultStatusKHR
{
	VK_QUERY_RESULT_STATUS_ERROR_KHR = -1,
	VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0,
	VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1,
	VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkQueryResultStatusKHR;

typedef enum VkVideoCodecOperationFlagBitsKHR
{
	VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR = 0,
#ifdef VK_ENABLE_BETA_EXTENSIONS
	VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT = 0x00010000,
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
	VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT = 0x00020000,
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
	VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT = 0x00000001,
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
	VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT = 0x00000002,
#endif
	VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoCodecOperationFlagBitsKHR;
typedef VkFlags VkVideoCodecOperationFlagsKHR;

typedef enum VkVideoChromaSubsamplingFlagBitsKHR
{
	VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR = 0,
	VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 0x00000001,
	VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 0x00000002,
	VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 0x00000004,
	VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 0x00000008,
	VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoChromaSubsamplingFlagBitsKHR;
typedef VkFlags VkVideoChromaSubsamplingFlagsKHR;

typedef enum VkVideoComponentBitDepthFlagBitsKHR
{
	VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0,
	VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 0x00000001,
	VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 0x00000004,
	VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 0x00000010,
	VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoComponentBitDepthFlagBitsKHR;
typedef VkFlags VkVideoComponentBitDepthFlagsKHR;

typedef enum VkVideoCapabilityFlagBitsKHR
{
	VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
	VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 0x00000002,
	VK_VIDEO_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoCapabilityFlagBitsKHR;
typedef VkFlags VkVideoCapabilityFlagsKHR;

typedef enum VkVideoSessionCreateFlagBitsKHR
{
	VK_VIDEO_SESSION_CREATE_DEFAULT_KHR = 0,
	VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
	VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoSessionCreateFlagBitsKHR;
typedef VkFlags VkVideoSessionCreateFlagsKHR;
typedef VkFlags VkVideoBeginCodingFlagsKHR;
typedef VkFlags VkVideoEndCodingFlagsKHR;

typedef enum VkVideoCodingControlFlagBitsKHR
{
	VK_VIDEO_CODING_CONTROL_DEFAULT_KHR = 0,
	VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 0x00000001,
	VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoCodingControlFlagBitsKHR;
typedef VkFlags VkVideoCodingControlFlagsKHR;

typedef enum VkVideoCodingQualityPresetFlagBitsKHR
{
	VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR = 0x00000001,
	VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR = 0x00000002,
	VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR = 0x00000004,
	VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoCodingQualityPresetFlagBitsKHR;
typedef VkFlags VkVideoCodingQualityPresetFlagsKHR;
typedef struct VkQueueFamilyQueryResultStatusProperties2KHR
{
	VkStructureType sType;
	void *pNext;
	VkBool32 supported;
} VkQueueFamilyQueryResultStatusProperties2KHR;

typedef struct VkVideoQueueFamilyProperties2KHR
{
	VkStructureType sType;
	void *pNext;
	VkVideoCodecOperationFlagsKHR videoCodecOperations;
} VkVideoQueueFamilyProperties2KHR;

typedef struct VkVideoProfileKHR
{
	VkStructureType sType;
	void *pNext;
	VkVideoCodecOperationFlagBitsKHR videoCodecOperation;
	VkVideoChromaSubsamplingFlagsKHR chromaSubsampling;
	VkVideoComponentBitDepthFlagsKHR lumaBitDepth;
	VkVideoComponentBitDepthFlagsKHR chromaBitDepth;
} VkVideoProfileKHR;

typedef struct VkVideoProfilesKHR
{
	VkStructureType sType;
	void *pNext;
	uint32_t profileCount;
	const VkVideoProfileKHR *pProfiles;
} VkVideoProfilesKHR;

typedef struct VkVideoCapabilitiesKHR
{
	VkStructureType sType;
	void *pNext;
	VkVideoCapabilityFlagsKHR capabilityFlags;
	VkDeviceSize minBitstreamBufferOffsetAlignment;
	VkDeviceSize minBitstreamBufferSizeAlignment;
	VkExtent2D videoPictureExtentGranularity;
	VkExtent2D minExtent;
	VkExtent2D maxExtent;
	uint32_t maxReferencePicturesSlotsCount;
	uint32_t maxReferencePicturesActiveCount;
	VkExtensionProperties stdHeaderVersion;
} VkVideoCapabilitiesKHR;

typedef struct VkPhysicalDeviceVideoFormatInfoKHR
{
	VkStructureType sType;
	void *pNext;
	VkImageUsageFlags imageUsage;
	const VkVideoProfilesKHR *pVideoProfiles;
} VkPhysicalDeviceVideoFormatInfoKHR;

typedef struct VkVideoFormatPropertiesKHR
{
	VkStructureType sType;
	void *pNext;
	VkFormat format;
} VkVideoFormatPropertiesKHR;

typedef struct VkVideoPictureResourceKHR
{
	VkStructureType sType;
	const void *pNext;
	VkOffset2D codedOffset;
	VkExtent2D codedExtent;
	uint32_t baseArrayLayer;
	VkImageView imageViewBinding;
} VkVideoPictureResourceKHR;

typedef struct VkVideoReferenceSlotKHR
{
	VkStructureType sType;
	const void *pNext;
	int8_t slotIndex;
	const VkVideoPictureResourceKHR *pPictureResource;
} VkVideoReferenceSlotKHR;

typedef struct VkVideoGetMemoryPropertiesKHR
{
	VkStructureType sType;
	const void *pNext;
	uint32_t memoryBindIndex;
	VkMemoryRequirements2 *pMemoryRequirements;
} VkVideoGetMemoryPropertiesKHR;

typedef struct VkVideoBindMemoryKHR
{
	VkStructureType sType;
	const void *pNext;
	uint32_t memoryBindIndex;
	VkDeviceMemory memory;
	VkDeviceSize memoryOffset;
	VkDeviceSize memorySize;
} VkVideoBindMemoryKHR;

typedef struct VkVideoSessionCreateInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	uint32_t queueFamilyIndex;
	VkVideoSessionCreateFlagsKHR flags;
	const VkVideoProfileKHR *pVideoProfile;
	VkFormat pictureFormat;
	VkExtent2D maxCodedExtent;
	VkFormat referencePicturesFormat;
	uint32_t maxReferencePicturesSlotsCount;
	uint32_t maxReferencePicturesActiveCount;
	const VkExtensionProperties *pStdHeaderVersion;
} VkVideoSessionCreateInfoKHR;

typedef struct VkVideoSessionParametersCreateInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	VkVideoSessionParametersKHR videoSessionParametersTemplate;
	VkVideoSessionKHR videoSession;
} VkVideoSessionParametersCreateInfoKHR;

typedef struct VkVideoSessionParametersUpdateInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	uint32_t updateSequenceCount;
} VkVideoSessionParametersUpdateInfoKHR;

typedef struct VkVideoBeginCodingInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	VkVideoBeginCodingFlagsKHR flags;
	VkVideoCodingQualityPresetFlagsKHR codecQualityPreset;
	VkVideoSessionKHR videoSession;
	VkVideoSessionParametersKHR videoSessionParameters;
	uint32_t referenceSlotCount;
	const VkVideoReferenceSlotKHR *pReferenceSlots;
} VkVideoBeginCodingInfoKHR;

typedef struct VkVideoEndCodingInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	VkVideoEndCodingFlagsKHR flags;
} VkVideoEndCodingInfoKHR;

typedef struct VkVideoCodingControlInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	VkVideoCodingControlFlagsKHR flags;
} VkVideoCodingControlInfoKHR;

typedef VkResult(VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR *pVideoProfile, VkVideoCapabilitiesKHR *pCapabilities);
typedef VkResult(VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR *pVideoFormatInfo, uint32_t *pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR *pVideoFormatProperties);
typedef VkResult(VKAPI_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkVideoSessionKHR *pVideoSession);
typedef void(VKAPI_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks *pAllocator);
typedef VkResult(VKAPI_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t *pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR *pVideoSessionMemoryRequirements);
typedef VkResult(VKAPI_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t videoSessionBindMemoryCount, const VkVideoBindMemoryKHR *pVideoSessionBindMemories);
typedef VkResult(VKAPI_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkVideoSessionParametersKHR *pVideoSessionParameters);
typedef VkResult(VKAPI_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR *pUpdateInfo);
typedef void(VKAPI_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks *pAllocator);
typedef void(VKAPI_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR *pBeginInfo);
typedef void(VKAPI_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR *pEndCodingInfo);
typedef void(VKAPI_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR *pCodingControlInfo);

#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR(
    VkPhysicalDevice physicalDevice,
    const VkVideoProfileKHR *pVideoProfile,
    VkVideoCapabilitiesKHR *pCapabilities);

VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR(
    VkPhysicalDevice physicalDevice,
    const VkPhysicalDeviceVideoFormatInfoKHR *pVideoFormatInfo,
    uint32_t *pVideoFormatPropertyCount,
    VkVideoFormatPropertiesKHR *pVideoFormatProperties);

VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR(
    VkDevice device,
    const VkVideoSessionCreateInfoKHR *pCreateInfo,
    const VkAllocationCallbacks *pAllocator,
    VkVideoSessionKHR *pVideoSession);

VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR(
    VkDevice device,
    VkVideoSessionKHR videoSession,
    const VkAllocationCallbacks *pAllocator);

VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR(
    VkDevice device,
    VkVideoSessionKHR videoSession,
    uint32_t *pVideoSessionMemoryRequirementsCount,
    VkVideoGetMemoryPropertiesKHR *pVideoSessionMemoryRequirements);

VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR(
    VkDevice device,
    VkVideoSessionKHR videoSession,
    uint32_t videoSessionBindMemoryCount,
    const VkVideoBindMemoryKHR *pVideoSessionBindMemories);

VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR(
    VkDevice device,
    const VkVideoSessionParametersCreateInfoKHR *pCreateInfo,
    const VkAllocationCallbacks *pAllocator,
    VkVideoSessionParametersKHR *pVideoSessionParameters);

VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR(
    VkDevice device,
    VkVideoSessionParametersKHR videoSessionParameters,
    const VkVideoSessionParametersUpdateInfoKHR *pUpdateInfo);

VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR(
    VkDevice device,
    VkVideoSessionParametersKHR videoSessionParameters,
    const VkAllocationCallbacks *pAllocator);

VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR(
    VkCommandBuffer commandBuffer,
    const VkVideoBeginCodingInfoKHR *pBeginInfo);

VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR(
    VkCommandBuffer commandBuffer,
    const VkVideoEndCodingInfoKHR *pEndCodingInfo);

VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR(
    VkCommandBuffer commandBuffer,
    const VkVideoCodingControlInfoKHR *pCodingControlInfo);
#endif

#define VK_KHR_video_decode_queue 1
#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 4
#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue"

typedef enum VkVideoDecodeCapabilityFlagBitsKHR
{
	VK_VIDEO_DECODE_CAPABILITY_DEFAULT_KHR = 0,
	VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR = 0x00000001,
	VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR = 0x00000002,
	VK_VIDEO_DECODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoDecodeCapabilityFlagBitsKHR;
typedef VkFlags VkVideoDecodeCapabilityFlagsKHR;

typedef enum VkVideoDecodeFlagBitsKHR
{
	VK_VIDEO_DECODE_DEFAULT_KHR = 0,
	VK_VIDEO_DECODE_RESERVED_0_BIT_KHR = 0x00000001,
	VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoDecodeFlagBitsKHR;
typedef VkFlags VkVideoDecodeFlagsKHR;
typedef struct VkVideoDecodeCapabilitiesKHR
{
	VkStructureType sType;
	void *pNext;
	VkVideoDecodeCapabilityFlagsKHR flags;
} VkVideoDecodeCapabilitiesKHR;

typedef struct VkVideoDecodeInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	VkVideoDecodeFlagsKHR flags;
	VkBuffer srcBuffer;
	VkDeviceSize srcBufferOffset;
	VkDeviceSize srcBufferRange;
	VkVideoPictureResourceKHR dstPictureResource;
	const VkVideoReferenceSlotKHR *pSetupReferenceSlot;
	uint32_t referenceSlotCount;
	const VkVideoReferenceSlotKHR *pReferenceSlots;
} VkVideoDecodeInfoKHR;

typedef void(VKAPI_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR *pFrameInfo);

#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR(
    VkCommandBuffer commandBuffer,
    const VkVideoDecodeInfoKHR *pFrameInfo);
#endif

#define VK_KHR_portability_subset 1
#define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1
#define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset"
typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR
{
	VkStructureType sType;
	void *pNext;
	VkBool32 constantAlphaColorBlendFactors;
	VkBool32 events;
	VkBool32 imageViewFormatReinterpretation;
	VkBool32 imageViewFormatSwizzle;
	VkBool32 imageView2DOn3DImage;
	VkBool32 multisampleArrayImage;
	VkBool32 mutableComparisonSamplers;
	VkBool32 pointPolygons;
	VkBool32 samplerMipLodBias;
	VkBool32 separateStencilMaskRef;
	VkBool32 shaderSampleRateInterpolationFunctions;
	VkBool32 tessellationIsolines;
	VkBool32 tessellationPointMode;
	VkBool32 triangleFans;
	VkBool32 vertexAttributeAccessBeyondStride;
} VkPhysicalDevicePortabilitySubsetFeaturesKHR;

typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR
{
	VkStructureType sType;
	void *pNext;
	uint32_t minVertexInputBindingStrideAlignment;
} VkPhysicalDevicePortabilitySubsetPropertiesKHR;

#define VK_KHR_video_encode_queue 1
#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 5
#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue"

typedef enum VkVideoEncodeFlagBitsKHR
{
	VK_VIDEO_ENCODE_DEFAULT_KHR = 0,
	VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR = 0x00000001,
	VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoEncodeFlagBitsKHR;
typedef VkFlags VkVideoEncodeFlagsKHR;

typedef enum VkVideoEncodeCapabilityFlagBitsKHR
{
	VK_VIDEO_ENCODE_CAPABILITY_DEFAULT_KHR = 0,
	VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR = 0x00000001,
	VK_VIDEO_ENCODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoEncodeCapabilityFlagBitsKHR;
typedef VkFlags VkVideoEncodeCapabilityFlagsKHR;

typedef enum VkVideoEncodeRateControlModeFlagBitsKHR
{
	VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR = 0,
	VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 1,
	VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 2,
	VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoEncodeRateControlModeFlagBitsKHR;
typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR;

typedef enum VkVideoEncodeRateControlFlagBitsKHR
{
	VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR = 0,
	VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR = 0x00000001,
	VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoEncodeRateControlFlagBitsKHR;
typedef VkFlags VkVideoEncodeRateControlFlagsKHR;
typedef struct VkVideoEncodeInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	VkVideoEncodeFlagsKHR flags;
	uint32_t qualityLevel;
	VkBuffer dstBitstreamBuffer;
	VkDeviceSize dstBitstreamBufferOffset;
	VkDeviceSize dstBitstreamBufferMaxRange;
	VkVideoPictureResourceKHR srcPictureResource;
	const VkVideoReferenceSlotKHR *pSetupReferenceSlot;
	uint32_t referenceSlotCount;
	const VkVideoReferenceSlotKHR *pReferenceSlots;
	uint32_t precedingExternallyEncodedBytes;
} VkVideoEncodeInfoKHR;

typedef struct VkVideoEncodeCapabilitiesKHR
{
	VkStructureType sType;
	void *pNext;
	VkVideoEncodeCapabilityFlagsKHR flags;
	VkVideoEncodeRateControlModeFlagsKHR rateControlModes;
	uint8_t rateControlLayerCount;
	uint8_t qualityLevelCount;
	VkExtent2D inputImageDataFillAlignment;
} VkVideoEncodeCapabilitiesKHR;

typedef struct VkVideoEncodeRateControlLayerInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	uint32_t averageBitrate;
	uint32_t maxBitrate;
	uint32_t frameRateNumerator;
	uint32_t frameRateDenominator;
	uint32_t virtualBufferSizeInMs;
	uint32_t initialVirtualBufferSizeInMs;
} VkVideoEncodeRateControlLayerInfoKHR;

typedef struct VkVideoEncodeRateControlInfoKHR
{
	VkStructureType sType;
	const void *pNext;
	VkVideoEncodeRateControlFlagsKHR flags;
	VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode;
	uint8_t layerCount;
	const VkVideoEncodeRateControlLayerInfoKHR *pLayerConfigs;
} VkVideoEncodeRateControlInfoKHR;

typedef void(VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR *pEncodeInfo);

#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR(
    VkCommandBuffer commandBuffer,
    const VkVideoEncodeInfoKHR *pEncodeInfo);
#endif

#define VK_EXT_video_encode_h264 1
#include "vk_video/vulkan_video_codec_h264std.h"
#include "vk_video/vulkan_video_codec_h264std_encode.h"
#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 6
#define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264"

typedef enum VkVideoEncodeH264CapabilityFlagBitsEXT
{
	VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT = 0x00000004,
	VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000008,
	VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000010,
	VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000020,
	VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000040,
	VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT = 0x00000080,
	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00000100,
	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT = 0x00000200,
	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT = 0x00000400,
	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00000800,
	VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00001000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00002000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00004000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00008000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00010000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00020000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT = 0x00040000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00080000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT = 0x00100000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT = 0x00200000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x00400000,
	VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH264CapabilityFlagBitsEXT;
typedef VkFlags VkVideoEncodeH264CapabilityFlagsEXT;

typedef enum VkVideoEncodeH264InputModeFlagBitsEXT
{
	VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
	VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH264InputModeFlagBitsEXT;
typedef VkFlags VkVideoEncodeH264InputModeFlagsEXT;

typedef enum VkVideoEncodeH264OutputModeFlagBitsEXT
{
	VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
	VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH264OutputModeFlagBitsEXT;
typedef VkFlags VkVideoEncodeH264OutputModeFlagsEXT;

typedef enum VkVideoEncodeH264RateControlStructureFlagBitsEXT
{
	VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0,
	VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH264RateControlStructureFlagBitsEXT;
typedef VkFlags VkVideoEncodeH264RateControlStructureFlagsEXT;
typedef struct VkVideoEncodeH264CapabilitiesEXT
{
	VkStructureType sType;
	void *pNext;
	VkVideoEncodeH264CapabilityFlagsEXT flags;
	VkVideoEncodeH264InputModeFlagsEXT inputModeFlags;
	VkVideoEncodeH264OutputModeFlagsEXT outputModeFlags;
	uint8_t maxPPictureL0ReferenceCount;
	uint8_t maxBPictureL0ReferenceCount;
	uint8_t maxL1ReferenceCount;
	VkBool32 motionVectorsOverPicBoundariesFlag;
	uint32_t maxBytesPerPicDenom;
	uint32_t maxBitsPerMbDenom;
	uint32_t log2MaxMvLengthHorizontal;
	uint32_t log2MaxMvLengthVertical;
} VkVideoEncodeH264CapabilitiesEXT;

typedef struct VkVideoEncodeH264SessionParametersAddInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t spsStdCount;
	const StdVideoH264SequenceParameterSet *pSpsStd;
	uint32_t ppsStdCount;
	const StdVideoH264PictureParameterSet *pPpsStd;
} VkVideoEncodeH264SessionParametersAddInfoEXT;

typedef struct VkVideoEncodeH264SessionParametersCreateInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t maxSpsStdCount;
	uint32_t maxPpsStdCount;
	const VkVideoEncodeH264SessionParametersAddInfoEXT *pParametersAddInfo;
} VkVideoEncodeH264SessionParametersCreateInfoEXT;

typedef struct VkVideoEncodeH264DpbSlotInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	int8_t slotIndex;
	const StdVideoEncodeH264ReferenceInfo *pStdReferenceInfo;
} VkVideoEncodeH264DpbSlotInfoEXT;

typedef struct VkVideoEncodeH264ReferenceListsEXT
{
	VkStructureType sType;
	const void *pNext;
	uint8_t referenceList0EntryCount;
	const VkVideoEncodeH264DpbSlotInfoEXT *pReferenceList0Entries;
	uint8_t referenceList1EntryCount;
	const VkVideoEncodeH264DpbSlotInfoEXT *pReferenceList1Entries;
	const StdVideoEncodeH264RefMemMgmtCtrlOperations *pMemMgmtCtrlOperations;
} VkVideoEncodeH264ReferenceListsEXT;

typedef struct VkVideoEncodeH264NaluSliceEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t mbCount;
	const VkVideoEncodeH264ReferenceListsEXT *pReferenceFinalLists;
	const StdVideoEncodeH264SliceHeader *pSliceHeaderStd;
} VkVideoEncodeH264NaluSliceEXT;

typedef struct VkVideoEncodeH264VclFrameInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	const VkVideoEncodeH264ReferenceListsEXT *pReferenceFinalLists;
	uint32_t naluSliceEntryCount;
	const VkVideoEncodeH264NaluSliceEXT *pNaluSliceEntries;
	const StdVideoEncodeH264PictureInfo *pCurrentPictureInfo;
} VkVideoEncodeH264VclFrameInfoEXT;

typedef struct VkVideoEncodeH264EmitPictureParametersEXT
{
	VkStructureType sType;
	const void *pNext;
	uint8_t spsId;
	VkBool32 emitSpsEnable;
	uint32_t ppsIdEntryCount;
	const uint8_t *ppsIdEntries;
} VkVideoEncodeH264EmitPictureParametersEXT;

typedef struct VkVideoEncodeH264ProfileEXT
{
	VkStructureType sType;
	const void *pNext;
	StdVideoH264ProfileIdc stdProfileIdc;
} VkVideoEncodeH264ProfileEXT;

typedef struct VkVideoEncodeH264RateControlInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t gopFrameCount;
	uint32_t idrPeriod;
	uint32_t consecutiveBFrameCount;
	VkVideoEncodeH264RateControlStructureFlagBitsEXT rateControlStructure;
	uint8_t temporalLayerCount;
} VkVideoEncodeH264RateControlInfoEXT;

typedef struct VkVideoEncodeH264QpEXT
{
	int32_t qpI;
	int32_t qpP;
	int32_t qpB;
} VkVideoEncodeH264QpEXT;

typedef struct VkVideoEncodeH264FrameSizeEXT
{
	uint32_t frameISize;
	uint32_t framePSize;
	uint32_t frameBSize;
} VkVideoEncodeH264FrameSizeEXT;

typedef struct VkVideoEncodeH264RateControlLayerInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint8_t temporalLayerId;
	VkBool32 useInitialRcQp;
	VkVideoEncodeH264QpEXT initialRcQp;
	VkBool32 useMinQp;
	VkVideoEncodeH264QpEXT minQp;
	VkBool32 useMaxQp;
	VkVideoEncodeH264QpEXT maxQp;
	VkBool32 useMaxFrameSize;
	VkVideoEncodeH264FrameSizeEXT maxFrameSize;
} VkVideoEncodeH264RateControlLayerInfoEXT;

#define VK_EXT_video_encode_h265 1
#include "vk_video/vulkan_video_codec_h265std.h"
#include "vk_video/vulkan_video_codec_h265std_encode.h"
#define VK_EXT_VIDEO_ENCODE_H265_SPEC_VERSION 7
#define VK_EXT_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_EXT_video_encode_h265"

typedef enum VkVideoEncodeH265CapabilityFlagBitsEXT
{
	VK_VIDEO_ENCODE_H265_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H265_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H265_CAPABILITY_SAMPLE_ADAPTIVE_OFFSET_ENABLED_BIT_EXT = 0x00000004,
	VK_VIDEO_ENCODE_H265_CAPABILITY_PCM_ENABLE_BIT_EXT = 0x00000008,
	VK_VIDEO_ENCODE_H265_CAPABILITY_SPS_TEMPORAL_MVP_ENABLED_BIT_EXT = 0x00000010,
	VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000020,
	VK_VIDEO_ENCODE_H265_CAPABILITY_INIT_QP_MINUS26_BIT_EXT = 0x00000040,
	VK_VIDEO_ENCODE_H265_CAPABILITY_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT = 0x00000080,
	VK_VIDEO_ENCODE_H265_CAPABILITY_SIGN_DATA_HIDING_ENABLED_BIT_EXT = 0x00000100,
	VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_ENABLED_BIT_EXT = 0x00000200,
	VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_DISABLED_BIT_EXT = 0x00000400,
	VK_VIDEO_ENCODE_H265_CAPABILITY_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_BIT_EXT = 0x00000800,
	VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00001000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_BIPRED_BIT_EXT = 0x00002000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00004000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSQUANT_BYPASS_ENABLED_BIT_EXT = 0x00008000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_ENTROPY_CODING_SYNC_ENABLED_BIT_EXT = 0x00010000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_DEBLOCKING_FILTER_OVERRIDE_ENABLED_BIT_EXT = 0x00020000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_FRAME_BIT_EXT = 0x00040000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_PER_TILE_BIT_EXT = 0x00080000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_SLICE_BIT_EXT = 0x00100000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_SLICE_SEGMENT_CTB_COUNT_BIT_EXT = 0x00200000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT = 0x00400000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_DEPENDENT_SLICE_SEGMENT_BIT_EXT = 0x00800000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x01000000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x02000000,
	VK_VIDEO_ENCODE_H265_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH265CapabilityFlagBitsEXT;
typedef VkFlags VkVideoEncodeH265CapabilityFlagsEXT;

typedef enum VkVideoEncodeH265InputModeFlagBitsEXT
{
	VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
	VK_VIDEO_ENCODE_H265_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH265InputModeFlagBitsEXT;
typedef VkFlags VkVideoEncodeH265InputModeFlagsEXT;

typedef enum VkVideoEncodeH265OutputModeFlagBitsEXT
{
	VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
	VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH265OutputModeFlagBitsEXT;
typedef VkFlags VkVideoEncodeH265OutputModeFlagsEXT;

typedef enum VkVideoEncodeH265CtbSizeFlagBitsEXT
{
	VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT = 0x00000004,
	VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH265CtbSizeFlagBitsEXT;
typedef VkFlags VkVideoEncodeH265CtbSizeFlagsEXT;

typedef enum VkVideoEncodeH265TransformBlockSizeFlagBitsEXT
{
	VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT = 0x00000004,
	VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT = 0x00000008,
	VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH265TransformBlockSizeFlagBitsEXT;
typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsEXT;

typedef enum VkVideoEncodeH265RateControlStructureFlagBitsEXT
{
	VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0,
	VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT = 0x00000001,
	VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT = 0x00000002,
	VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH265RateControlStructureFlagBitsEXT;
typedef VkFlags VkVideoEncodeH265RateControlStructureFlagsEXT;
typedef struct VkVideoEncodeH265CapabilitiesEXT
{
	VkStructureType sType;
	void *pNext;
	VkVideoEncodeH265CapabilityFlagsEXT flags;
	VkVideoEncodeH265InputModeFlagsEXT inputModeFlags;
	VkVideoEncodeH265OutputModeFlagsEXT outputModeFlags;
	VkVideoEncodeH265CtbSizeFlagsEXT ctbSizes;
	VkVideoEncodeH265TransformBlockSizeFlagsEXT transformBlockSizes;
	uint8_t maxPPictureL0ReferenceCount;
	uint8_t maxBPictureL0ReferenceCount;
	uint8_t maxL1ReferenceCount;
	uint8_t maxSubLayersCount;
	uint8_t minLog2MinLumaCodingBlockSizeMinus3;
	uint8_t maxLog2MinLumaCodingBlockSizeMinus3;
	uint8_t minLog2MinLumaTransformBlockSizeMinus2;
	uint8_t maxLog2MinLumaTransformBlockSizeMinus2;
	uint8_t minMaxTransformHierarchyDepthInter;
	uint8_t maxMaxTransformHierarchyDepthInter;
	uint8_t minMaxTransformHierarchyDepthIntra;
	uint8_t maxMaxTransformHierarchyDepthIntra;
	uint8_t maxDiffCuQpDeltaDepth;
	uint8_t minMaxNumMergeCand;
	uint8_t maxMaxNumMergeCand;
} VkVideoEncodeH265CapabilitiesEXT;

typedef struct VkVideoEncodeH265SessionParametersAddInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t vpsStdCount;
	const StdVideoH265VideoParameterSet *pVpsStd;
	uint32_t spsStdCount;
	const StdVideoH265SequenceParameterSet *pSpsStd;
	uint32_t ppsStdCount;
	const StdVideoH265PictureParameterSet *pPpsStd;
} VkVideoEncodeH265SessionParametersAddInfoEXT;

typedef struct VkVideoEncodeH265SessionParametersCreateInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t maxVpsStdCount;
	uint32_t maxSpsStdCount;
	uint32_t maxPpsStdCount;
	const VkVideoEncodeH265SessionParametersAddInfoEXT *pParametersAddInfo;
} VkVideoEncodeH265SessionParametersCreateInfoEXT;

typedef struct VkVideoEncodeH265DpbSlotInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	int8_t slotIndex;
	const StdVideoEncodeH265ReferenceInfo *pStdReferenceInfo;
} VkVideoEncodeH265DpbSlotInfoEXT;

typedef struct VkVideoEncodeH265ReferenceListsEXT
{
	VkStructureType sType;
	const void *pNext;
	uint8_t referenceList0EntryCount;
	const VkVideoEncodeH265DpbSlotInfoEXT *pReferenceList0Entries;
	uint8_t referenceList1EntryCount;
	const VkVideoEncodeH265DpbSlotInfoEXT *pReferenceList1Entries;
	const StdVideoEncodeH265ReferenceModifications *pReferenceModifications;
} VkVideoEncodeH265ReferenceListsEXT;

typedef struct VkVideoEncodeH265NaluSliceSegmentEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t ctbCount;
	const VkVideoEncodeH265ReferenceListsEXT *pReferenceFinalLists;
	const StdVideoEncodeH265SliceSegmentHeader *pSliceSegmentHeaderStd;
} VkVideoEncodeH265NaluSliceSegmentEXT;

typedef struct VkVideoEncodeH265VclFrameInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	const VkVideoEncodeH265ReferenceListsEXT *pReferenceFinalLists;
	uint32_t naluSliceSegmentEntryCount;
	const VkVideoEncodeH265NaluSliceSegmentEXT *pNaluSliceSegmentEntries;
	const StdVideoEncodeH265PictureInfo *pCurrentPictureInfo;
} VkVideoEncodeH265VclFrameInfoEXT;

typedef struct VkVideoEncodeH265EmitPictureParametersEXT
{
	VkStructureType sType;
	const void *pNext;
	uint8_t vpsId;
	uint8_t spsId;
	VkBool32 emitVpsEnable;
	VkBool32 emitSpsEnable;
	uint32_t ppsIdEntryCount;
	const uint8_t *ppsIdEntries;
} VkVideoEncodeH265EmitPictureParametersEXT;

typedef struct VkVideoEncodeH265ProfileEXT
{
	VkStructureType sType;
	const void *pNext;
	StdVideoH265ProfileIdc stdProfileIdc;
} VkVideoEncodeH265ProfileEXT;

typedef struct VkVideoEncodeH265RateControlInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t gopFrameCount;
	uint32_t idrPeriod;
	uint32_t consecutiveBFrameCount;
	VkVideoEncodeH265RateControlStructureFlagBitsEXT rateControlStructure;
	uint8_t subLayerCount;
} VkVideoEncodeH265RateControlInfoEXT;

typedef struct VkVideoEncodeH265QpEXT
{
	int32_t qpI;
	int32_t qpP;
	int32_t qpB;
} VkVideoEncodeH265QpEXT;

typedef struct VkVideoEncodeH265FrameSizeEXT
{
	uint32_t frameISize;
	uint32_t framePSize;
	uint32_t frameBSize;
} VkVideoEncodeH265FrameSizeEXT;

typedef struct VkVideoEncodeH265RateControlLayerInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint8_t temporalId;
	VkBool32 useInitialRcQp;
	VkVideoEncodeH265QpEXT initialRcQp;
	VkBool32 useMinQp;
	VkVideoEncodeH265QpEXT minQp;
	VkBool32 useMaxQp;
	VkVideoEncodeH265QpEXT maxQp;
	VkBool32 useMaxFrameSize;
	VkVideoEncodeH265FrameSizeEXT maxFrameSize;
} VkVideoEncodeH265RateControlLayerInfoEXT;

#define VK_EXT_video_decode_h264 1
#include "vk_video/vulkan_video_codec_h264std_decode.h"
#define VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION 5
#define VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME "VK_EXT_video_decode_h264"

typedef enum VkVideoDecodeH264PictureLayoutFlagBitsEXT
{
	VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT = 0,
	VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT = 0x00000001,
	VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT = 0x00000002,
	VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoDecodeH264PictureLayoutFlagBitsEXT;
typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsEXT;
typedef struct VkVideoDecodeH264ProfileEXT
{
	VkStructureType sType;
	const void *pNext;
	StdVideoH264ProfileIdc stdProfileIdc;
	VkVideoDecodeH264PictureLayoutFlagsEXT pictureLayout;
} VkVideoDecodeH264ProfileEXT;

typedef struct VkVideoDecodeH264CapabilitiesEXT
{
	VkStructureType sType;
	void *pNext;
	StdVideoH264Level maxLevel;
	VkOffset2D fieldOffsetGranularity;
} VkVideoDecodeH264CapabilitiesEXT;

typedef struct VkVideoDecodeH264SessionParametersAddInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t spsStdCount;
	const StdVideoH264SequenceParameterSet *pSpsStd;
	uint32_t ppsStdCount;
	const StdVideoH264PictureParameterSet *pPpsStd;
} VkVideoDecodeH264SessionParametersAddInfoEXT;

typedef struct VkVideoDecodeH264SessionParametersCreateInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t maxSpsStdCount;
	uint32_t maxPpsStdCount;
	const VkVideoDecodeH264SessionParametersAddInfoEXT *pParametersAddInfo;
} VkVideoDecodeH264SessionParametersCreateInfoEXT;

typedef struct VkVideoDecodeH264PictureInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	const StdVideoDecodeH264PictureInfo *pStdPictureInfo;
	uint32_t slicesCount;
	const uint32_t *pSlicesDataOffsets;
} VkVideoDecodeH264PictureInfoEXT;

typedef struct VkVideoDecodeH264MvcEXT
{
	VkStructureType sType;
	const void *pNext;
	const StdVideoDecodeH264Mvc *pStdMvc;
} VkVideoDecodeH264MvcEXT;

typedef struct VkVideoDecodeH264DpbSlotInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	const StdVideoDecodeH264ReferenceInfo *pStdReferenceInfo;
} VkVideoDecodeH264DpbSlotInfoEXT;

#define VK_EXT_video_decode_h265 1
#include "vk_video/vulkan_video_codec_h265std_decode.h"
#define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 3
#define VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME "VK_EXT_video_decode_h265"
typedef struct VkVideoDecodeH265ProfileEXT
{
	VkStructureType sType;
	const void *pNext;
	StdVideoH265ProfileIdc stdProfileIdc;
} VkVideoDecodeH265ProfileEXT;

typedef struct VkVideoDecodeH265CapabilitiesEXT
{
	VkStructureType sType;
	void *pNext;
	StdVideoH265Level maxLevel;
} VkVideoDecodeH265CapabilitiesEXT;

typedef struct VkVideoDecodeH265SessionParametersAddInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t vpsStdCount;
	const StdVideoH265VideoParameterSet *pVpsStd;
	uint32_t spsStdCount;
	const StdVideoH265SequenceParameterSet *pSpsStd;
	uint32_t ppsStdCount;
	const StdVideoH265PictureParameterSet *pPpsStd;
} VkVideoDecodeH265SessionParametersAddInfoEXT;

typedef struct VkVideoDecodeH265SessionParametersCreateInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	uint32_t maxVpsStdCount;
	uint32_t maxSpsStdCount;
	uint32_t maxPpsStdCount;
	const VkVideoDecodeH265SessionParametersAddInfoEXT *pParametersAddInfo;
} VkVideoDecodeH265SessionParametersCreateInfoEXT;

typedef struct VkVideoDecodeH265PictureInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	StdVideoDecodeH265PictureInfo *pStdPictureInfo;
	uint32_t slicesCount;
	const uint32_t *pSlicesDataOffsets;
} VkVideoDecodeH265PictureInfoEXT;

typedef struct VkVideoDecodeH265DpbSlotInfoEXT
{
	VkStructureType sType;
	const void *pNext;
	const StdVideoDecodeH265ReferenceInfo *pStdReferenceInfo;
} VkVideoDecodeH265DpbSlotInfoEXT;

#ifdef __cplusplus
}
#endif

#endif
