1#ifndef VULKAN_BETA_H_
2#define VULKAN_BETA_H_ 1
3
4/*
5** Copyright 2015-2022 The Khronos Group Inc.
6**
7** SPDX-License-Identifier: Apache-2.0
8*/
9
10/*
11** This header is generated from the Khronos Vulkan XML API Registry.
12**
13*/
14
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20
21
22#define VK_KHR_video_queue 1
23VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR)
24VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR)
25#define VK_KHR_VIDEO_QUEUE_SPEC_VERSION   4
26#define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue"
27
28typedef enum VkQueryResultStatusKHR {
29    VK_QUERY_RESULT_STATUS_ERROR_KHR = -1,
30    VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0,
31    VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1,
32    VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF
33} VkQueryResultStatusKHR;
34
35typedef enum VkVideoCodecOperationFlagBitsKHR {
36    VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR = 0,
37#ifdef VK_ENABLE_BETA_EXTENSIONS
38    VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT = 0x00010000,
39#endif
40#ifdef VK_ENABLE_BETA_EXTENSIONS
41    VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT = 0x00020000,
42#endif
43#ifdef VK_ENABLE_BETA_EXTENSIONS
44    VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT = 0x00000001,
45#endif
46#ifdef VK_ENABLE_BETA_EXTENSIONS
47    VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT = 0x00000002,
48#endif
49    VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
50} VkVideoCodecOperationFlagBitsKHR;
51typedef VkFlags VkVideoCodecOperationFlagsKHR;
52
53typedef enum VkVideoChromaSubsamplingFlagBitsKHR {
54    VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR = 0,
55    VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 0x00000001,
56    VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 0x00000002,
57    VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 0x00000004,
58    VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 0x00000008,
59    VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
60} VkVideoChromaSubsamplingFlagBitsKHR;
61typedef VkFlags VkVideoChromaSubsamplingFlagsKHR;
62
63typedef enum VkVideoComponentBitDepthFlagBitsKHR {
64    VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0,
65    VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 0x00000001,
66    VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 0x00000004,
67    VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 0x00000010,
68    VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
69} VkVideoComponentBitDepthFlagBitsKHR;
70typedef VkFlags VkVideoComponentBitDepthFlagsKHR;
71
72typedef enum VkVideoCapabilityFlagBitsKHR {
73    VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
74    VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 0x00000002,
75    VK_VIDEO_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
76} VkVideoCapabilityFlagBitsKHR;
77typedef VkFlags VkVideoCapabilityFlagsKHR;
78
79typedef enum VkVideoSessionCreateFlagBitsKHR {
80    VK_VIDEO_SESSION_CREATE_DEFAULT_KHR = 0,
81    VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
82    VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
83} VkVideoSessionCreateFlagBitsKHR;
84typedef VkFlags VkVideoSessionCreateFlagsKHR;
85typedef VkFlags VkVideoBeginCodingFlagsKHR;
86typedef VkFlags VkVideoEndCodingFlagsKHR;
87
88typedef enum VkVideoCodingControlFlagBitsKHR {
89    VK_VIDEO_CODING_CONTROL_DEFAULT_KHR = 0,
90    VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 0x00000001,
91    VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
92} VkVideoCodingControlFlagBitsKHR;
93typedef VkFlags VkVideoCodingControlFlagsKHR;
94
95typedef enum VkVideoCodingQualityPresetFlagBitsKHR {
96    VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR = 0x00000001,
97    VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR = 0x00000002,
98    VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR = 0x00000004,
99    VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
100} VkVideoCodingQualityPresetFlagBitsKHR;
101typedef VkFlags VkVideoCodingQualityPresetFlagsKHR;
102typedef struct VkQueueFamilyQueryResultStatusProperties2KHR {
103    VkStructureType    sType;
104    void*              pNext;
105    VkBool32           queryResultStatusSupport;
106} VkQueueFamilyQueryResultStatusProperties2KHR;
107
108typedef struct VkVideoQueueFamilyProperties2KHR {
109    VkStructureType                  sType;
110    void*                            pNext;
111    VkVideoCodecOperationFlagsKHR    videoCodecOperations;
112} VkVideoQueueFamilyProperties2KHR;
113
114typedef struct VkVideoProfileKHR {
115    VkStructureType                     sType;
116    const void*                         pNext;
117    VkVideoCodecOperationFlagBitsKHR    videoCodecOperation;
118    VkVideoChromaSubsamplingFlagsKHR    chromaSubsampling;
119    VkVideoComponentBitDepthFlagsKHR    lumaBitDepth;
120    VkVideoComponentBitDepthFlagsKHR    chromaBitDepth;
121} VkVideoProfileKHR;
122
123typedef struct VkVideoProfilesKHR {
124    VkStructureType             sType;
125    const void*                 pNext;
126    uint32_t                    profileCount;
127    const VkVideoProfileKHR*    pProfiles;
128} VkVideoProfilesKHR;
129
130typedef struct VkVideoCapabilitiesKHR {
131    VkStructureType              sType;
132    void*                        pNext;
133    VkVideoCapabilityFlagsKHR    capabilityFlags;
134    VkDeviceSize                 minBitstreamBufferOffsetAlignment;
135    VkDeviceSize                 minBitstreamBufferSizeAlignment;
136    VkExtent2D                   videoPictureExtentGranularity;
137    VkExtent2D                   minExtent;
138    VkExtent2D                   maxExtent;
139    uint32_t                     maxReferencePicturesSlotsCount;
140    uint32_t                     maxReferencePicturesActiveCount;
141    VkExtensionProperties        stdHeaderVersion;
142} VkVideoCapabilitiesKHR;
143
144typedef struct VkPhysicalDeviceVideoFormatInfoKHR {
145     VkStructureType     sType;
146    void*                pNext;
147    VkImageUsageFlags    imageUsage;
148} VkPhysicalDeviceVideoFormatInfoKHR;
149
150typedef struct VkVideoFormatPropertiesKHR {
151    VkStructureType       sType;
152    void*                 pNext;
153    VkFormat              format;
154    VkComponentMapping    componentMapping;
155    VkImageCreateFlags    imageCreateFlags;
156    VkImageType           imageType;
157    VkImageTiling         imageTiling;
158    VkImageUsageFlags     imageUsageFlags;
159} VkVideoFormatPropertiesKHR;
160
161typedef struct VkVideoPictureResourceKHR {
162    VkStructureType    sType;
163    const void*        pNext;
164    VkOffset2D         codedOffset;
165    VkExtent2D         codedExtent;
166    uint32_t           baseArrayLayer;
167    VkImageView        imageViewBinding;
168} VkVideoPictureResourceKHR;
169
170typedef struct VkVideoReferenceSlotKHR {
171    VkStructureType                     sType;
172    const void*                         pNext;
173    int8_t                              slotIndex;
174    const VkVideoPictureResourceKHR*    pPictureResource;
175} VkVideoReferenceSlotKHR;
176
177typedef struct VkVideoGetMemoryPropertiesKHR {
178    VkStructureType           sType;
179    const void*               pNext;
180    uint32_t                  memoryBindIndex;
181    VkMemoryRequirements2*    pMemoryRequirements;
182} VkVideoGetMemoryPropertiesKHR;
183
184typedef struct VkVideoBindMemoryKHR {
185    VkStructureType    sType;
186    const void*        pNext;
187    uint32_t           memoryBindIndex;
188    VkDeviceMemory     memory;
189    VkDeviceSize       memoryOffset;
190    VkDeviceSize       memorySize;
191} VkVideoBindMemoryKHR;
192
193typedef struct VkVideoSessionCreateInfoKHR {
194    VkStructureType                 sType;
195    const void*                     pNext;
196    uint32_t                        queueFamilyIndex;
197    VkVideoSessionCreateFlagsKHR    flags;
198    const VkVideoProfileKHR*        pVideoProfile;
199    VkFormat                        pictureFormat;
200    VkExtent2D                      maxCodedExtent;
201    VkFormat                        referencePicturesFormat;
202    uint32_t                        maxReferencePicturesSlotsCount;
203    uint32_t                        maxReferencePicturesActiveCount;
204    const VkExtensionProperties*    pStdHeaderVersion;
205} VkVideoSessionCreateInfoKHR;
206
207typedef struct VkVideoSessionParametersCreateInfoKHR {
208    VkStructureType                sType;
209    const void*                    pNext;
210    VkVideoSessionParametersKHR    videoSessionParametersTemplate;
211    VkVideoSessionKHR              videoSession;
212} VkVideoSessionParametersCreateInfoKHR;
213
214typedef struct VkVideoSessionParametersUpdateInfoKHR {
215    VkStructureType    sType;
216    const void*        pNext;
217    uint32_t           updateSequenceCount;
218} VkVideoSessionParametersUpdateInfoKHR;
219
220typedef struct VkVideoBeginCodingInfoKHR {
221    VkStructureType                       sType;
222    const void*                           pNext;
223    VkVideoBeginCodingFlagsKHR            flags;
224    VkVideoCodingQualityPresetFlagsKHR    codecQualityPreset;
225    VkVideoSessionKHR                     videoSession;
226    VkVideoSessionParametersKHR           videoSessionParameters;
227    uint32_t                              referenceSlotCount;
228    const VkVideoReferenceSlotKHR*        pReferenceSlots;
229} VkVideoBeginCodingInfoKHR;
230
231typedef struct VkVideoEndCodingInfoKHR {
232    VkStructureType             sType;
233    const void*                 pNext;
234    VkVideoEndCodingFlagsKHR    flags;
235} VkVideoEndCodingInfoKHR;
236
237typedef struct VkVideoCodingControlInfoKHR {
238    VkStructureType                 sType;
239    const void*                     pNext;
240    VkVideoCodingControlFlagsKHR    flags;
241} VkVideoCodingControlInfoKHR;
242
243typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities);
244typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, uint32_t* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties);
245typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession);
246typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator);
247typedef VkResult (VKAPI_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements);
248typedef VkResult (VKAPI_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories);
249typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters);
250typedef VkResult (VKAPI_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
251typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator);
252typedef void (VKAPI_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo);
253typedef void (VKAPI_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo);
254typedef void (VKAPI_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo);
255
256#ifndef VK_NO_PROTOTYPES
257VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR(
258    VkPhysicalDevice                            physicalDevice,
259    const VkVideoProfileKHR*                    pVideoProfile,
260    VkVideoCapabilitiesKHR*                     pCapabilities);
261
262VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR(
263    VkPhysicalDevice                            physicalDevice,
264    const VkPhysicalDeviceVideoFormatInfoKHR*   pVideoFormatInfo,
265    uint32_t*                                   pVideoFormatPropertyCount,
266    VkVideoFormatPropertiesKHR*                 pVideoFormatProperties);
267
268VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR(
269    VkDevice                                    device,
270    const VkVideoSessionCreateInfoKHR*          pCreateInfo,
271    const VkAllocationCallbacks*                pAllocator,
272    VkVideoSessionKHR*                          pVideoSession);
273
274VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR(
275    VkDevice                                    device,
276    VkVideoSessionKHR                           videoSession,
277    const VkAllocationCallbacks*                pAllocator);
278
279VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR(
280    VkDevice                                    device,
281    VkVideoSessionKHR                           videoSession,
282    uint32_t*                                   pVideoSessionMemoryRequirementsCount,
283    VkVideoGetMemoryPropertiesKHR*              pVideoSessionMemoryRequirements);
284
285VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR(
286    VkDevice                                    device,
287    VkVideoSessionKHR                           videoSession,
288    uint32_t                                    videoSessionBindMemoryCount,
289    const VkVideoBindMemoryKHR*                 pVideoSessionBindMemories);
290
291VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR(
292    VkDevice                                    device,
293    const VkVideoSessionParametersCreateInfoKHR* pCreateInfo,
294    const VkAllocationCallbacks*                pAllocator,
295    VkVideoSessionParametersKHR*                pVideoSessionParameters);
296
297VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR(
298    VkDevice                                    device,
299    VkVideoSessionParametersKHR                 videoSessionParameters,
300    const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
301
302VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR(
303    VkDevice                                    device,
304    VkVideoSessionParametersKHR                 videoSessionParameters,
305    const VkAllocationCallbacks*                pAllocator);
306
307VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR(
308    VkCommandBuffer                             commandBuffer,
309    const VkVideoBeginCodingInfoKHR*            pBeginInfo);
310
311VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR(
312    VkCommandBuffer                             commandBuffer,
313    const VkVideoEndCodingInfoKHR*              pEndCodingInfo);
314
315VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR(
316    VkCommandBuffer                             commandBuffer,
317    const VkVideoCodingControlInfoKHR*          pCodingControlInfo);
318#endif
319
320
321#define VK_KHR_video_decode_queue 1
322#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 4
323#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue"
324
325typedef enum VkVideoDecodeCapabilityFlagBitsKHR {
326    VK_VIDEO_DECODE_CAPABILITY_DEFAULT_KHR = 0,
327    VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR = 0x00000001,
328    VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR = 0x00000002,
329    VK_VIDEO_DECODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
330} VkVideoDecodeCapabilityFlagBitsKHR;
331typedef VkFlags VkVideoDecodeCapabilityFlagsKHR;
332
333typedef enum VkVideoDecodeFlagBitsKHR {
334    VK_VIDEO_DECODE_DEFAULT_KHR = 0,
335    VK_VIDEO_DECODE_RESERVED_0_BIT_KHR = 0x00000001,
336    VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
337} VkVideoDecodeFlagBitsKHR;
338typedef VkFlags VkVideoDecodeFlagsKHR;
339typedef struct VkVideoDecodeCapabilitiesKHR {
340    VkStructureType                    sType;
341    void*                              pNext;
342    VkVideoDecodeCapabilityFlagsKHR    flags;
343} VkVideoDecodeCapabilitiesKHR;
344
345typedef struct VkVideoDecodeInfoKHR {
346    VkStructureType                   sType;
347    const void*                       pNext;
348    VkVideoDecodeFlagsKHR             flags;
349    VkBuffer                          srcBuffer;
350    VkDeviceSize                      srcBufferOffset;
351    VkDeviceSize                      srcBufferRange;
352    VkVideoPictureResourceKHR         dstPictureResource;
353    const VkVideoReferenceSlotKHR*    pSetupReferenceSlot;
354    uint32_t                          referenceSlotCount;
355    const VkVideoReferenceSlotKHR*    pReferenceSlots;
356} VkVideoDecodeInfoKHR;
357
358typedef void (VKAPI_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo);
359
360#ifndef VK_NO_PROTOTYPES
361VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR(
362    VkCommandBuffer                             commandBuffer,
363    const VkVideoDecodeInfoKHR*                 pFrameInfo);
364#endif
365
366
367#define VK_KHR_portability_subset 1
368#define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1
369#define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset"
370typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR {
371    VkStructureType    sType;
372    void*              pNext;
373    VkBool32           constantAlphaColorBlendFactors;
374    VkBool32           events;
375    VkBool32           imageViewFormatReinterpretation;
376    VkBool32           imageViewFormatSwizzle;
377    VkBool32           imageView2DOn3DImage;
378    VkBool32           multisampleArrayImage;
379    VkBool32           mutableComparisonSamplers;
380    VkBool32           pointPolygons;
381    VkBool32           samplerMipLodBias;
382    VkBool32           separateStencilMaskRef;
383    VkBool32           shaderSampleRateInterpolationFunctions;
384    VkBool32           tessellationIsolines;
385    VkBool32           tessellationPointMode;
386    VkBool32           triangleFans;
387    VkBool32           vertexAttributeAccessBeyondStride;
388} VkPhysicalDevicePortabilitySubsetFeaturesKHR;
389
390typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR {
391    VkStructureType    sType;
392    void*              pNext;
393    uint32_t           minVertexInputBindingStrideAlignment;
394} VkPhysicalDevicePortabilitySubsetPropertiesKHR;
395
396
397
398#define VK_KHR_video_encode_queue 1
399#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 5
400#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue"
401
402typedef enum VkVideoEncodeFlagBitsKHR {
403    VK_VIDEO_ENCODE_DEFAULT_KHR = 0,
404    VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR = 0x00000001,
405    VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
406} VkVideoEncodeFlagBitsKHR;
407typedef VkFlags VkVideoEncodeFlagsKHR;
408
409typedef enum VkVideoEncodeCapabilityFlagBitsKHR {
410    VK_VIDEO_ENCODE_CAPABILITY_DEFAULT_KHR = 0,
411    VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR = 0x00000001,
412    VK_VIDEO_ENCODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
413} VkVideoEncodeCapabilityFlagBitsKHR;
414typedef VkFlags VkVideoEncodeCapabilityFlagsKHR;
415
416typedef enum VkVideoEncodeRateControlModeFlagBitsKHR {
417    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR = 0,
418    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 1,
419    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 2,
420    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
421} VkVideoEncodeRateControlModeFlagBitsKHR;
422typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR;
423
424typedef enum VkVideoEncodeRateControlFlagBitsKHR {
425    VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR = 0,
426    VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR = 0x00000001,
427    VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
428} VkVideoEncodeRateControlFlagBitsKHR;
429typedef VkFlags VkVideoEncodeRateControlFlagsKHR;
430typedef struct VkVideoEncodeInfoKHR {
431    VkStructureType                   sType;
432    const void*                       pNext;
433    VkVideoEncodeFlagsKHR             flags;
434    uint32_t                          qualityLevel;
435    VkBuffer                          dstBitstreamBuffer;
436    VkDeviceSize                      dstBitstreamBufferOffset;
437    VkDeviceSize                      dstBitstreamBufferMaxRange;
438    VkVideoPictureResourceKHR         srcPictureResource;
439    const VkVideoReferenceSlotKHR*    pSetupReferenceSlot;
440    uint32_t                          referenceSlotCount;
441    const VkVideoReferenceSlotKHR*    pReferenceSlots;
442    uint32_t                          precedingExternallyEncodedBytes;
443} VkVideoEncodeInfoKHR;
444
445typedef struct VkVideoEncodeCapabilitiesKHR {
446    VkStructureType                         sType;
447    void*                                   pNext;
448    VkVideoEncodeCapabilityFlagsKHR         flags;
449    VkVideoEncodeRateControlModeFlagsKHR    rateControlModes;
450    uint8_t                                 rateControlLayerCount;
451    uint8_t                                 qualityLevelCount;
452    VkExtent2D                              inputImageDataFillAlignment;
453} VkVideoEncodeCapabilitiesKHR;
454
455typedef struct VkVideoEncodeRateControlLayerInfoKHR {
456    VkStructureType    sType;
457    const void*        pNext;
458    uint32_t           averageBitrate;
459    uint32_t           maxBitrate;
460    uint32_t           frameRateNumerator;
461    uint32_t           frameRateDenominator;
462    uint32_t           virtualBufferSizeInMs;
463    uint32_t           initialVirtualBufferSizeInMs;
464} VkVideoEncodeRateControlLayerInfoKHR;
465
466typedef struct VkVideoEncodeRateControlInfoKHR {
467    VkStructureType                                sType;
468    const void*                                    pNext;
469    VkVideoEncodeRateControlFlagsKHR               flags;
470    VkVideoEncodeRateControlModeFlagBitsKHR        rateControlMode;
471    uint8_t                                        layerCount;
472    const VkVideoEncodeRateControlLayerInfoKHR*    pLayerConfigs;
473} VkVideoEncodeRateControlInfoKHR;
474
475typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo);
476
477#ifndef VK_NO_PROTOTYPES
478VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR(
479    VkCommandBuffer                             commandBuffer,
480    const VkVideoEncodeInfoKHR*                 pEncodeInfo);
481#endif
482
483
484#define VK_EXT_video_encode_h264 1
485#include "vk_video/vulkan_video_codec_h264std.h"
486#include "vk_video/vulkan_video_codec_h264std_encode.h"
487#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 7
488#define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264"
489
490typedef enum VkVideoEncodeH264CapabilityFlagBitsEXT {
491    VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT = 0x00000001,
492    VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT = 0x00000002,
493    VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000004,
494    VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT = 0x00000008,
495    VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000010,
496    VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000020,
497    VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000040,
498    VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000080,
499    VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT = 0x00000100,
500    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00000200,
501    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT = 0x00000400,
502    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT = 0x00000800,
503    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00001000,
504    VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00002000,
505    VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00004000,
506    VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00008000,
507    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00010000,
508    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00020000,
509    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00040000,
510    VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT = 0x00080000,
511    VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00100000,
512    VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT = 0x00200000,
513    VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT = 0x00400000,
514    VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x00800000,
515    VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x01000000,
516    VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
517} VkVideoEncodeH264CapabilityFlagBitsEXT;
518typedef VkFlags VkVideoEncodeH264CapabilityFlagsEXT;
519
520typedef enum VkVideoEncodeH264InputModeFlagBitsEXT {
521    VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
522    VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT = 0x00000002,
523    VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
524    VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
525} VkVideoEncodeH264InputModeFlagBitsEXT;
526typedef VkFlags VkVideoEncodeH264InputModeFlagsEXT;
527
528typedef enum VkVideoEncodeH264OutputModeFlagBitsEXT {
529    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
530    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT = 0x00000002,
531    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
532    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
533} VkVideoEncodeH264OutputModeFlagBitsEXT;
534typedef VkFlags VkVideoEncodeH264OutputModeFlagsEXT;
535
536typedef enum VkVideoEncodeH264RateControlStructureFlagBitsEXT {
537    VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0,
538    VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT = 0x00000001,
539    VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT = 0x00000002,
540    VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
541} VkVideoEncodeH264RateControlStructureFlagBitsEXT;
542typedef VkFlags VkVideoEncodeH264RateControlStructureFlagsEXT;
543typedef struct VkVideoEncodeH264CapabilitiesEXT {
544    VkStructureType                        sType;
545    void*                                  pNext;
546    VkVideoEncodeH264CapabilityFlagsEXT    flags;
547    VkVideoEncodeH264InputModeFlagsEXT     inputModeFlags;
548    VkVideoEncodeH264OutputModeFlagsEXT    outputModeFlags;
549    uint8_t                                maxPPictureL0ReferenceCount;
550    uint8_t                                maxBPictureL0ReferenceCount;
551    uint8_t                                maxL1ReferenceCount;
552    VkBool32                               motionVectorsOverPicBoundariesFlag;
553    uint32_t                               maxBytesPerPicDenom;
554    uint32_t                               maxBitsPerMbDenom;
555    uint32_t                               log2MaxMvLengthHorizontal;
556    uint32_t                               log2MaxMvLengthVertical;
557} VkVideoEncodeH264CapabilitiesEXT;
558
559typedef struct VkVideoEncodeH264SessionParametersAddInfoEXT {
560    VkStructureType                            sType;
561    const void*                                pNext;
562    uint32_t                                   spsStdCount;
563    const StdVideoH264SequenceParameterSet*    pSpsStd;
564    uint32_t                                   ppsStdCount;
565    const StdVideoH264PictureParameterSet*     pPpsStd;
566} VkVideoEncodeH264SessionParametersAddInfoEXT;
567
568typedef struct VkVideoEncodeH264SessionParametersCreateInfoEXT {
569    VkStructureType                                        sType;
570    const void*                                            pNext;
571    uint32_t                                               maxSpsStdCount;
572    uint32_t                                               maxPpsStdCount;
573    const VkVideoEncodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
574} VkVideoEncodeH264SessionParametersCreateInfoEXT;
575
576typedef struct VkVideoEncodeH264DpbSlotInfoEXT {
577    VkStructureType                           sType;
578    const void*                               pNext;
579    int8_t                                    slotIndex;
580    const StdVideoEncodeH264ReferenceInfo*    pStdReferenceInfo;
581} VkVideoEncodeH264DpbSlotInfoEXT;
582
583typedef struct VkVideoEncodeH264ReferenceListsEXT {
584    VkStructureType                                      sType;
585    const void*                                          pNext;
586    uint8_t                                              referenceList0EntryCount;
587    const VkVideoEncodeH264DpbSlotInfoEXT*               pReferenceList0Entries;
588    uint8_t                                              referenceList1EntryCount;
589    const VkVideoEncodeH264DpbSlotInfoEXT*               pReferenceList1Entries;
590    const StdVideoEncodeH264RefMemMgmtCtrlOperations*    pMemMgmtCtrlOperations;
591} VkVideoEncodeH264ReferenceListsEXT;
592
593typedef struct VkVideoEncodeH264NaluSliceEXT {
594    VkStructureType                              sType;
595    const void*                                  pNext;
596    uint32_t                                     mbCount;
597    const VkVideoEncodeH264ReferenceListsEXT*    pReferenceFinalLists;
598    const StdVideoEncodeH264SliceHeader*         pSliceHeaderStd;
599} VkVideoEncodeH264NaluSliceEXT;
600
601typedef struct VkVideoEncodeH264VclFrameInfoEXT {
602    VkStructureType                              sType;
603    const void*                                  pNext;
604    const VkVideoEncodeH264ReferenceListsEXT*    pReferenceFinalLists;
605    uint32_t                                     naluSliceEntryCount;
606    const VkVideoEncodeH264NaluSliceEXT*         pNaluSliceEntries;
607    const StdVideoEncodeH264PictureInfo*         pCurrentPictureInfo;
608} VkVideoEncodeH264VclFrameInfoEXT;
609
610typedef struct VkVideoEncodeH264EmitPictureParametersEXT {
611    VkStructureType    sType;
612    const void*        pNext;
613    uint8_t            spsId;
614    VkBool32           emitSpsEnable;
615    uint32_t           ppsIdEntryCount;
616    const uint8_t*     ppsIdEntries;
617} VkVideoEncodeH264EmitPictureParametersEXT;
618
619typedef struct VkVideoEncodeH264ProfileEXT {
620    VkStructureType           sType;
621    const void*               pNext;
622    StdVideoH264ProfileIdc    stdProfileIdc;
623} VkVideoEncodeH264ProfileEXT;
624
625typedef struct VkVideoEncodeH264RateControlInfoEXT {
626    VkStructureType                                     sType;
627    const void*                                         pNext;
628    uint32_t                                            gopFrameCount;
629    uint32_t                                            idrPeriod;
630    uint32_t                                            consecutiveBFrameCount;
631    VkVideoEncodeH264RateControlStructureFlagBitsEXT    rateControlStructure;
632    uint8_t                                             temporalLayerCount;
633} VkVideoEncodeH264RateControlInfoEXT;
634
635typedef struct VkVideoEncodeH264QpEXT {
636    int32_t    qpI;
637    int32_t    qpP;
638    int32_t    qpB;
639} VkVideoEncodeH264QpEXT;
640
641typedef struct VkVideoEncodeH264FrameSizeEXT {
642    uint32_t    frameISize;
643    uint32_t    framePSize;
644    uint32_t    frameBSize;
645} VkVideoEncodeH264FrameSizeEXT;
646
647typedef struct VkVideoEncodeH264RateControlLayerInfoEXT {
648    VkStructureType                  sType;
649    const void*                      pNext;
650    uint8_t                          temporalLayerId;
651    VkBool32                         useInitialRcQp;
652    VkVideoEncodeH264QpEXT           initialRcQp;
653    VkBool32                         useMinQp;
654    VkVideoEncodeH264QpEXT           minQp;
655    VkBool32                         useMaxQp;
656    VkVideoEncodeH264QpEXT           maxQp;
657    VkBool32                         useMaxFrameSize;
658    VkVideoEncodeH264FrameSizeEXT    maxFrameSize;
659} VkVideoEncodeH264RateControlLayerInfoEXT;
660
661
662
663#define VK_EXT_video_encode_h265 1
664#include "vk_video/vulkan_video_codec_h265std.h"
665#include "vk_video/vulkan_video_codec_h265std_encode.h"
666#define VK_EXT_VIDEO_ENCODE_H265_SPEC_VERSION 7
667#define VK_EXT_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_EXT_video_encode_h265"
668
669typedef enum VkVideoEncodeH265CapabilityFlagBitsEXT {
670    VK_VIDEO_ENCODE_H265_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000001,
671    VK_VIDEO_ENCODE_H265_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000002,
672    VK_VIDEO_ENCODE_H265_CAPABILITY_SAMPLE_ADAPTIVE_OFFSET_ENABLED_BIT_EXT = 0x00000004,
673    VK_VIDEO_ENCODE_H265_CAPABILITY_PCM_ENABLE_BIT_EXT = 0x00000008,
674    VK_VIDEO_ENCODE_H265_CAPABILITY_SPS_TEMPORAL_MVP_ENABLED_BIT_EXT = 0x00000010,
675    VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000020,
676    VK_VIDEO_ENCODE_H265_CAPABILITY_INIT_QP_MINUS26_BIT_EXT = 0x00000040,
677    VK_VIDEO_ENCODE_H265_CAPABILITY_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT = 0x00000080,
678    VK_VIDEO_ENCODE_H265_CAPABILITY_SIGN_DATA_HIDING_ENABLED_BIT_EXT = 0x00000100,
679    VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_ENABLED_BIT_EXT = 0x00000200,
680    VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_DISABLED_BIT_EXT = 0x00000400,
681    VK_VIDEO_ENCODE_H265_CAPABILITY_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_BIT_EXT = 0x00000800,
682    VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00001000,
683    VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_BIPRED_BIT_EXT = 0x00002000,
684    VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00004000,
685    VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSQUANT_BYPASS_ENABLED_BIT_EXT = 0x00008000,
686    VK_VIDEO_ENCODE_H265_CAPABILITY_ENTROPY_CODING_SYNC_ENABLED_BIT_EXT = 0x00010000,
687    VK_VIDEO_ENCODE_H265_CAPABILITY_DEBLOCKING_FILTER_OVERRIDE_ENABLED_BIT_EXT = 0x00020000,
688    VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_FRAME_BIT_EXT = 0x00040000,
689    VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_PER_TILE_BIT_EXT = 0x00080000,
690    VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_SLICE_BIT_EXT = 0x00100000,
691    VK_VIDEO_ENCODE_H265_CAPABILITY_SLICE_SEGMENT_CTB_COUNT_BIT_EXT = 0x00200000,
692    VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT = 0x00400000,
693    VK_VIDEO_ENCODE_H265_CAPABILITY_DEPENDENT_SLICE_SEGMENT_BIT_EXT = 0x00800000,
694    VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x01000000,
695    VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x02000000,
696    VK_VIDEO_ENCODE_H265_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
697} VkVideoEncodeH265CapabilityFlagBitsEXT;
698typedef VkFlags VkVideoEncodeH265CapabilityFlagsEXT;
699
700typedef enum VkVideoEncodeH265InputModeFlagBitsEXT {
701    VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
702    VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002,
703    VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
704    VK_VIDEO_ENCODE_H265_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
705} VkVideoEncodeH265InputModeFlagBitsEXT;
706typedef VkFlags VkVideoEncodeH265InputModeFlagsEXT;
707
708typedef enum VkVideoEncodeH265OutputModeFlagBitsEXT {
709    VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
710    VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002,
711    VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
712    VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
713} VkVideoEncodeH265OutputModeFlagBitsEXT;
714typedef VkFlags VkVideoEncodeH265OutputModeFlagsEXT;
715
716typedef enum VkVideoEncodeH265CtbSizeFlagBitsEXT {
717    VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT = 0x00000001,
718    VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT = 0x00000002,
719    VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT = 0x00000004,
720    VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
721} VkVideoEncodeH265CtbSizeFlagBitsEXT;
722typedef VkFlags VkVideoEncodeH265CtbSizeFlagsEXT;
723
724typedef enum VkVideoEncodeH265TransformBlockSizeFlagBitsEXT {
725    VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT = 0x00000001,
726    VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT = 0x00000002,
727    VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT = 0x00000004,
728    VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT = 0x00000008,
729    VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
730} VkVideoEncodeH265TransformBlockSizeFlagBitsEXT;
731typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsEXT;
732
733typedef enum VkVideoEncodeH265RateControlStructureFlagBitsEXT {
734    VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0,
735    VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT = 0x00000001,
736    VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT = 0x00000002,
737    VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
738} VkVideoEncodeH265RateControlStructureFlagBitsEXT;
739typedef VkFlags VkVideoEncodeH265RateControlStructureFlagsEXT;
740typedef struct VkVideoEncodeH265CapabilitiesEXT {
741    VkStructureType                                sType;
742    void*                                          pNext;
743    VkVideoEncodeH265CapabilityFlagsEXT            flags;
744    VkVideoEncodeH265InputModeFlagsEXT             inputModeFlags;
745    VkVideoEncodeH265OutputModeFlagsEXT            outputModeFlags;
746    VkVideoEncodeH265CtbSizeFlagsEXT               ctbSizes;
747    VkVideoEncodeH265TransformBlockSizeFlagsEXT    transformBlockSizes;
748    uint8_t                                        maxPPictureL0ReferenceCount;
749    uint8_t                                        maxBPictureL0ReferenceCount;
750    uint8_t                                        maxL1ReferenceCount;
751    uint8_t                                        maxSubLayersCount;
752    uint8_t                                        minLog2MinLumaCodingBlockSizeMinus3;
753    uint8_t                                        maxLog2MinLumaCodingBlockSizeMinus3;
754    uint8_t                                        minLog2MinLumaTransformBlockSizeMinus2;
755    uint8_t                                        maxLog2MinLumaTransformBlockSizeMinus2;
756    uint8_t                                        minMaxTransformHierarchyDepthInter;
757    uint8_t                                        maxMaxTransformHierarchyDepthInter;
758    uint8_t                                        minMaxTransformHierarchyDepthIntra;
759    uint8_t                                        maxMaxTransformHierarchyDepthIntra;
760    uint8_t                                        maxDiffCuQpDeltaDepth;
761    uint8_t                                        minMaxNumMergeCand;
762    uint8_t                                        maxMaxNumMergeCand;
763} VkVideoEncodeH265CapabilitiesEXT;
764
765typedef struct VkVideoEncodeH265SessionParametersAddInfoEXT {
766    VkStructureType                            sType;
767    const void*                                pNext;
768    uint32_t                                   vpsStdCount;
769    const StdVideoH265VideoParameterSet*       pVpsStd;
770    uint32_t                                   spsStdCount;
771    const StdVideoH265SequenceParameterSet*    pSpsStd;
772    uint32_t                                   ppsStdCount;
773    const StdVideoH265PictureParameterSet*     pPpsStd;
774} VkVideoEncodeH265SessionParametersAddInfoEXT;
775
776typedef struct VkVideoEncodeH265SessionParametersCreateInfoEXT {
777    VkStructureType                                        sType;
778    const void*                                            pNext;
779    uint32_t                                               maxVpsStdCount;
780    uint32_t                                               maxSpsStdCount;
781    uint32_t                                               maxPpsStdCount;
782    const VkVideoEncodeH265SessionParametersAddInfoEXT*    pParametersAddInfo;
783} VkVideoEncodeH265SessionParametersCreateInfoEXT;
784
785typedef struct VkVideoEncodeH265DpbSlotInfoEXT {
786    VkStructureType                           sType;
787    const void*                               pNext;
788    int8_t                                    slotIndex;
789    const StdVideoEncodeH265ReferenceInfo*    pStdReferenceInfo;
790} VkVideoEncodeH265DpbSlotInfoEXT;
791
792typedef struct VkVideoEncodeH265ReferenceListsEXT {
793    VkStructureType                                    sType;
794    const void*                                        pNext;
795    uint8_t                                            referenceList0EntryCount;
796    const VkVideoEncodeH265DpbSlotInfoEXT*             pReferenceList0Entries;
797    uint8_t                                            referenceList1EntryCount;
798    const VkVideoEncodeH265DpbSlotInfoEXT*             pReferenceList1Entries;
799    const StdVideoEncodeH265ReferenceModifications*    pReferenceModifications;
800} VkVideoEncodeH265ReferenceListsEXT;
801
802typedef struct VkVideoEncodeH265NaluSliceSegmentEXT {
803    VkStructureType                                sType;
804    const void*                                    pNext;
805    uint32_t                                       ctbCount;
806    const VkVideoEncodeH265ReferenceListsEXT*      pReferenceFinalLists;
807    const StdVideoEncodeH265SliceSegmentHeader*    pSliceSegmentHeaderStd;
808} VkVideoEncodeH265NaluSliceSegmentEXT;
809
810typedef struct VkVideoEncodeH265VclFrameInfoEXT {
811    VkStructureType                                sType;
812    const void*                                    pNext;
813    const VkVideoEncodeH265ReferenceListsEXT*      pReferenceFinalLists;
814    uint32_t                                       naluSliceSegmentEntryCount;
815    const VkVideoEncodeH265NaluSliceSegmentEXT*    pNaluSliceSegmentEntries;
816    const StdVideoEncodeH265PictureInfo*           pCurrentPictureInfo;
817} VkVideoEncodeH265VclFrameInfoEXT;
818
819typedef struct VkVideoEncodeH265EmitPictureParametersEXT {
820    VkStructureType    sType;
821    const void*        pNext;
822    uint8_t            vpsId;
823    uint8_t            spsId;
824    VkBool32           emitVpsEnable;
825    VkBool32           emitSpsEnable;
826    uint32_t           ppsIdEntryCount;
827    const uint8_t*     ppsIdEntries;
828} VkVideoEncodeH265EmitPictureParametersEXT;
829
830typedef struct VkVideoEncodeH265ProfileEXT {
831    VkStructureType           sType;
832    const void*               pNext;
833    StdVideoH265ProfileIdc    stdProfileIdc;
834} VkVideoEncodeH265ProfileEXT;
835
836typedef struct VkVideoEncodeH265RateControlInfoEXT {
837    VkStructureType                                     sType;
838    const void*                                         pNext;
839    uint32_t                                            gopFrameCount;
840    uint32_t                                            idrPeriod;
841    uint32_t                                            consecutiveBFrameCount;
842    VkVideoEncodeH265RateControlStructureFlagBitsEXT    rateControlStructure;
843    uint8_t                                             subLayerCount;
844} VkVideoEncodeH265RateControlInfoEXT;
845
846typedef struct VkVideoEncodeH265QpEXT {
847    int32_t    qpI;
848    int32_t    qpP;
849    int32_t    qpB;
850} VkVideoEncodeH265QpEXT;
851
852typedef struct VkVideoEncodeH265FrameSizeEXT {
853    uint32_t    frameISize;
854    uint32_t    framePSize;
855    uint32_t    frameBSize;
856} VkVideoEncodeH265FrameSizeEXT;
857
858typedef struct VkVideoEncodeH265RateControlLayerInfoEXT {
859    VkStructureType                  sType;
860    const void*                      pNext;
861    uint8_t                          temporalId;
862    VkBool32                         useInitialRcQp;
863    VkVideoEncodeH265QpEXT           initialRcQp;
864    VkBool32                         useMinQp;
865    VkVideoEncodeH265QpEXT           minQp;
866    VkBool32                         useMaxQp;
867    VkVideoEncodeH265QpEXT           maxQp;
868    VkBool32                         useMaxFrameSize;
869    VkVideoEncodeH265FrameSizeEXT    maxFrameSize;
870} VkVideoEncodeH265RateControlLayerInfoEXT;
871
872
873
874#define VK_EXT_video_decode_h264 1
875#include "vk_video/vulkan_video_codec_h264std_decode.h"
876#define VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION 5
877#define VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME "VK_EXT_video_decode_h264"
878
879typedef enum VkVideoDecodeH264PictureLayoutFlagBitsEXT {
880    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT = 0,
881    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT = 0x00000001,
882    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT = 0x00000002,
883    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
884} VkVideoDecodeH264PictureLayoutFlagBitsEXT;
885typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsEXT;
886typedef struct VkVideoDecodeH264ProfileEXT {
887    VkStructureType                           sType;
888    const void*                               pNext;
889    StdVideoH264ProfileIdc                    stdProfileIdc;
890    VkVideoDecodeH264PictureLayoutFlagsEXT    pictureLayout;
891} VkVideoDecodeH264ProfileEXT;
892
893typedef struct VkVideoDecodeH264CapabilitiesEXT {
894    VkStructureType      sType;
895    void*                pNext;
896    StdVideoH264Level    maxLevel;
897    VkOffset2D           fieldOffsetGranularity;
898} VkVideoDecodeH264CapabilitiesEXT;
899
900typedef struct VkVideoDecodeH264SessionParametersAddInfoEXT {
901    VkStructureType                            sType;
902    const void*                                pNext;
903    uint32_t                                   spsStdCount;
904    const StdVideoH264SequenceParameterSet*    pSpsStd;
905    uint32_t                                   ppsStdCount;
906    const StdVideoH264PictureParameterSet*     pPpsStd;
907} VkVideoDecodeH264SessionParametersAddInfoEXT;
908
909typedef struct VkVideoDecodeH264SessionParametersCreateInfoEXT {
910    VkStructureType                                        sType;
911    const void*                                            pNext;
912    uint32_t                                               maxSpsStdCount;
913    uint32_t                                               maxPpsStdCount;
914    const VkVideoDecodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
915} VkVideoDecodeH264SessionParametersCreateInfoEXT;
916
917typedef struct VkVideoDecodeH264PictureInfoEXT {
918    VkStructureType                         sType;
919    const void*                             pNext;
920    const StdVideoDecodeH264PictureInfo*    pStdPictureInfo;
921    uint32_t                                slicesCount;
922    const uint32_t*                         pSlicesDataOffsets;
923} VkVideoDecodeH264PictureInfoEXT;
924
925typedef struct VkVideoDecodeH264MvcEXT {
926    VkStructureType                 sType;
927    const void*                     pNext;
928    const StdVideoDecodeH264Mvc*    pStdMvc;
929} VkVideoDecodeH264MvcEXT;
930
931typedef struct VkVideoDecodeH264DpbSlotInfoEXT {
932    VkStructureType                           sType;
933    const void*                               pNext;
934    const StdVideoDecodeH264ReferenceInfo*    pStdReferenceInfo;
935} VkVideoDecodeH264DpbSlotInfoEXT;
936
937
938
939#define VK_EXT_video_decode_h265 1
940#include "vk_video/vulkan_video_codec_h265std_decode.h"
941#define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 3
942#define VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME "VK_EXT_video_decode_h265"
943typedef struct VkVideoDecodeH265ProfileEXT {
944    VkStructureType           sType;
945    const void*               pNext;
946    StdVideoH265ProfileIdc    stdProfileIdc;
947} VkVideoDecodeH265ProfileEXT;
948
949typedef struct VkVideoDecodeH265CapabilitiesEXT {
950    VkStructureType      sType;
951    void*                pNext;
952    StdVideoH265Level    maxLevel;
953} VkVideoDecodeH265CapabilitiesEXT;
954
955typedef struct VkVideoDecodeH265SessionParametersAddInfoEXT {
956    VkStructureType                            sType;
957    const void*                                pNext;
958    uint32_t                                   vpsStdCount;
959    const StdVideoH265VideoParameterSet*       pVpsStd;
960    uint32_t                                   spsStdCount;
961    const StdVideoH265SequenceParameterSet*    pSpsStd;
962    uint32_t                                   ppsStdCount;
963    const StdVideoH265PictureParameterSet*     pPpsStd;
964} VkVideoDecodeH265SessionParametersAddInfoEXT;
965
966typedef struct VkVideoDecodeH265SessionParametersCreateInfoEXT {
967    VkStructureType                                        sType;
968    const void*                                            pNext;
969    uint32_t                                               maxVpsStdCount;
970    uint32_t                                               maxSpsStdCount;
971    uint32_t                                               maxPpsStdCount;
972    const VkVideoDecodeH265SessionParametersAddInfoEXT*    pParametersAddInfo;
973} VkVideoDecodeH265SessionParametersCreateInfoEXT;
974
975typedef struct VkVideoDecodeH265PictureInfoEXT {
976    VkStructureType                   sType;
977    const void*                       pNext;
978    StdVideoDecodeH265PictureInfo*    pStdPictureInfo;
979    uint32_t                          slicesCount;
980    const uint32_t*                   pSlicesDataOffsets;
981} VkVideoDecodeH265PictureInfoEXT;
982
983typedef struct VkVideoDecodeH265DpbSlotInfoEXT {
984    VkStructureType                           sType;
985    const void*                               pNext;
986    const StdVideoDecodeH265ReferenceInfo*    pStdReferenceInfo;
987} VkVideoDecodeH265DpbSlotInfoEXT;
988
989
990#ifdef __cplusplus
991}
992#endif
993
994#endif
995