1 #ifndef VULKAN_BETA_H_
2 #define VULKAN_BETA_H_ 1
3 
4 /*
5 ** Copyright 2015-2021 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
17 extern "C" {
18 #endif
19 
20 
21 
22 #define VK_KHR_video_queue 1
23 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR)
24 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR)
25 #define VK_KHR_VIDEO_QUEUE_SPEC_VERSION   2
26 #define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue"
27 
28 typedef 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 
35 typedef 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_DECODE_H264_BIT_EXT = 0x00000001,
42 #endif
43 #ifdef VK_ENABLE_BETA_EXTENSIONS
44     VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT = 0x00000002,
45 #endif
46     VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
47 } VkVideoCodecOperationFlagBitsKHR;
48 typedef VkFlags VkVideoCodecOperationFlagsKHR;
49 
50 typedef enum VkVideoChromaSubsamplingFlagBitsKHR {
51     VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR = 0,
52     VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 0x00000001,
53     VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 0x00000002,
54     VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 0x00000004,
55     VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 0x00000008,
56     VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
57 } VkVideoChromaSubsamplingFlagBitsKHR;
58 typedef VkFlags VkVideoChromaSubsamplingFlagsKHR;
59 
60 typedef enum VkVideoComponentBitDepthFlagBitsKHR {
61     VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0,
62     VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 0x00000001,
63     VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 0x00000004,
64     VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 0x00000010,
65     VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
66 } VkVideoComponentBitDepthFlagBitsKHR;
67 typedef VkFlags VkVideoComponentBitDepthFlagsKHR;
68 
69 typedef enum VkVideoCapabilityFlagBitsKHR {
70     VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
71     VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 0x00000002,
72     VK_VIDEO_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
73 } VkVideoCapabilityFlagBitsKHR;
74 typedef VkFlags VkVideoCapabilityFlagsKHR;
75 
76 typedef enum VkVideoSessionCreateFlagBitsKHR {
77     VK_VIDEO_SESSION_CREATE_DEFAULT_KHR = 0,
78     VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
79     VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
80 } VkVideoSessionCreateFlagBitsKHR;
81 typedef VkFlags VkVideoSessionCreateFlagsKHR;
82 typedef VkFlags VkVideoBeginCodingFlagsKHR;
83 typedef VkFlags VkVideoEndCodingFlagsKHR;
84 
85 typedef enum VkVideoCodingControlFlagBitsKHR {
86     VK_VIDEO_CODING_CONTROL_DEFAULT_KHR = 0,
87     VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 0x00000001,
88     VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
89 } VkVideoCodingControlFlagBitsKHR;
90 typedef VkFlags VkVideoCodingControlFlagsKHR;
91 
92 typedef enum VkVideoCodingQualityPresetFlagBitsKHR {
93     VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR = 0x00000001,
94     VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR = 0x00000002,
95     VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR = 0x00000004,
96     VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
97 } VkVideoCodingQualityPresetFlagBitsKHR;
98 typedef VkFlags VkVideoCodingQualityPresetFlagsKHR;
99 typedef struct VkVideoQueueFamilyProperties2KHR {
100     VkStructureType                  sType;
101     void*                            pNext;
102     VkVideoCodecOperationFlagsKHR    videoCodecOperations;
103 } VkVideoQueueFamilyProperties2KHR;
104 
105 typedef struct VkVideoProfileKHR {
106     VkStructureType                     sType;
107     void*                               pNext;
108     VkVideoCodecOperationFlagBitsKHR    videoCodecOperation;
109     VkVideoChromaSubsamplingFlagsKHR    chromaSubsampling;
110     VkVideoComponentBitDepthFlagsKHR    lumaBitDepth;
111     VkVideoComponentBitDepthFlagsKHR    chromaBitDepth;
112 } VkVideoProfileKHR;
113 
114 typedef struct VkVideoProfilesKHR {
115     VkStructureType             sType;
116     void*                       pNext;
117     uint32_t                    profileCount;
118     const VkVideoProfileKHR*    pProfiles;
119 } VkVideoProfilesKHR;
120 
121 typedef struct VkVideoCapabilitiesKHR {
122     VkStructureType              sType;
123     void*                        pNext;
124     VkVideoCapabilityFlagsKHR    capabilityFlags;
125     VkDeviceSize                 minBitstreamBufferOffsetAlignment;
126     VkDeviceSize                 minBitstreamBufferSizeAlignment;
127     VkExtent2D                   videoPictureExtentGranularity;
128     VkExtent2D                   minExtent;
129     VkExtent2D                   maxExtent;
130     uint32_t                     maxReferencePicturesSlotsCount;
131     uint32_t                     maxReferencePicturesActiveCount;
132 } VkVideoCapabilitiesKHR;
133 
134 typedef struct VkPhysicalDeviceVideoFormatInfoKHR {
135     VkStructureType              sType;
136     void*                        pNext;
137     VkImageUsageFlags            imageUsage;
138     const VkVideoProfilesKHR*    pVideoProfiles;
139 } VkPhysicalDeviceVideoFormatInfoKHR;
140 
141 typedef struct VkVideoFormatPropertiesKHR {
142     VkStructureType    sType;
143     void*              pNext;
144     VkFormat           format;
145 } VkVideoFormatPropertiesKHR;
146 
147 typedef struct VkVideoPictureResourceKHR {
148     VkStructureType    sType;
149     const void*        pNext;
150     VkOffset2D         codedOffset;
151     VkExtent2D         codedExtent;
152     uint32_t           baseArrayLayer;
153     VkImageView        imageViewBinding;
154 } VkVideoPictureResourceKHR;
155 
156 typedef struct VkVideoReferenceSlotKHR {
157     VkStructureType                     sType;
158     const void*                         pNext;
159     int8_t                              slotIndex;
160     const VkVideoPictureResourceKHR*    pPictureResource;
161 } VkVideoReferenceSlotKHR;
162 
163 typedef struct VkVideoGetMemoryPropertiesKHR {
164     VkStructureType           sType;
165     const void*               pNext;
166     uint32_t                  memoryBindIndex;
167     VkMemoryRequirements2*    pMemoryRequirements;
168 } VkVideoGetMemoryPropertiesKHR;
169 
170 typedef struct VkVideoBindMemoryKHR {
171     VkStructureType    sType;
172     const void*        pNext;
173     uint32_t           memoryBindIndex;
174     VkDeviceMemory     memory;
175     VkDeviceSize       memoryOffset;
176     VkDeviceSize       memorySize;
177 } VkVideoBindMemoryKHR;
178 
179 typedef struct VkVideoSessionCreateInfoKHR {
180     VkStructureType                 sType;
181     const void*                     pNext;
182     uint32_t                        queueFamilyIndex;
183     VkVideoSessionCreateFlagsKHR    flags;
184     const VkVideoProfileKHR*        pVideoProfile;
185     VkFormat                        pictureFormat;
186     VkExtent2D                      maxCodedExtent;
187     VkFormat                        referencePicturesFormat;
188     uint32_t                        maxReferencePicturesSlotsCount;
189     uint32_t                        maxReferencePicturesActiveCount;
190 } VkVideoSessionCreateInfoKHR;
191 
192 typedef struct VkVideoSessionParametersCreateInfoKHR {
193     VkStructureType                sType;
194     const void*                    pNext;
195     VkVideoSessionParametersKHR    videoSessionParametersTemplate;
196     VkVideoSessionKHR              videoSession;
197 } VkVideoSessionParametersCreateInfoKHR;
198 
199 typedef struct VkVideoSessionParametersUpdateInfoKHR {
200     VkStructureType    sType;
201     const void*        pNext;
202     uint32_t           updateSequenceCount;
203 } VkVideoSessionParametersUpdateInfoKHR;
204 
205 typedef struct VkVideoBeginCodingInfoKHR {
206     VkStructureType                       sType;
207     const void*                           pNext;
208     VkVideoBeginCodingFlagsKHR            flags;
209     VkVideoCodingQualityPresetFlagsKHR    codecQualityPreset;
210     VkVideoSessionKHR                     videoSession;
211     VkVideoSessionParametersKHR           videoSessionParameters;
212     uint32_t                              referenceSlotCount;
213     const VkVideoReferenceSlotKHR*        pReferenceSlots;
214 } VkVideoBeginCodingInfoKHR;
215 
216 typedef struct VkVideoEndCodingInfoKHR {
217     VkStructureType             sType;
218     const void*                 pNext;
219     VkVideoEndCodingFlagsKHR    flags;
220 } VkVideoEndCodingInfoKHR;
221 
222 typedef struct VkVideoCodingControlInfoKHR {
223     VkStructureType                 sType;
224     const void*                     pNext;
225     VkVideoCodingControlFlagsKHR    flags;
226 } VkVideoCodingControlInfoKHR;
227 
228 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities);
229 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, uint32_t* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties);
230 typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession);
231 typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator);
232 typedef VkResult (VKAPI_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements);
233 typedef VkResult (VKAPI_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories);
234 typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters);
235 typedef VkResult (VKAPI_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
236 typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator);
237 typedef void (VKAPI_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo);
238 typedef void (VKAPI_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo);
239 typedef void (VKAPI_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo);
240 
241 #ifndef VK_NO_PROTOTYPES
242 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR(
243     VkPhysicalDevice                            physicalDevice,
244     const VkVideoProfileKHR*                    pVideoProfile,
245     VkVideoCapabilitiesKHR*                     pCapabilities);
246 
247 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR(
248     VkPhysicalDevice                            physicalDevice,
249     const VkPhysicalDeviceVideoFormatInfoKHR*   pVideoFormatInfo,
250     uint32_t*                                   pVideoFormatPropertyCount,
251     VkVideoFormatPropertiesKHR*                 pVideoFormatProperties);
252 
253 VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR(
254     VkDevice                                    device,
255     const VkVideoSessionCreateInfoKHR*          pCreateInfo,
256     const VkAllocationCallbacks*                pAllocator,
257     VkVideoSessionKHR*                          pVideoSession);
258 
259 VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR(
260     VkDevice                                    device,
261     VkVideoSessionKHR                           videoSession,
262     const VkAllocationCallbacks*                pAllocator);
263 
264 VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR(
265     VkDevice                                    device,
266     VkVideoSessionKHR                           videoSession,
267     uint32_t*                                   pVideoSessionMemoryRequirementsCount,
268     VkVideoGetMemoryPropertiesKHR*              pVideoSessionMemoryRequirements);
269 
270 VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR(
271     VkDevice                                    device,
272     VkVideoSessionKHR                           videoSession,
273     uint32_t                                    videoSessionBindMemoryCount,
274     const VkVideoBindMemoryKHR*                 pVideoSessionBindMemories);
275 
276 VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR(
277     VkDevice                                    device,
278     const VkVideoSessionParametersCreateInfoKHR* pCreateInfo,
279     const VkAllocationCallbacks*                pAllocator,
280     VkVideoSessionParametersKHR*                pVideoSessionParameters);
281 
282 VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR(
283     VkDevice                                    device,
284     VkVideoSessionParametersKHR                 videoSessionParameters,
285     const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
286 
287 VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR(
288     VkDevice                                    device,
289     VkVideoSessionParametersKHR                 videoSessionParameters,
290     const VkAllocationCallbacks*                pAllocator);
291 
292 VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR(
293     VkCommandBuffer                             commandBuffer,
294     const VkVideoBeginCodingInfoKHR*            pBeginInfo);
295 
296 VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR(
297     VkCommandBuffer                             commandBuffer,
298     const VkVideoEndCodingInfoKHR*              pEndCodingInfo);
299 
300 VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR(
301     VkCommandBuffer                             commandBuffer,
302     const VkVideoCodingControlInfoKHR*          pCodingControlInfo);
303 #endif
304 
305 
306 #define VK_KHR_video_decode_queue 1
307 #define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 2
308 #define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue"
309 
310 typedef enum VkVideoDecodeFlagBitsKHR {
311     VK_VIDEO_DECODE_DEFAULT_KHR = 0,
312     VK_VIDEO_DECODE_RESERVED_0_BIT_KHR = 0x00000001,
313     VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
314 } VkVideoDecodeFlagBitsKHR;
315 typedef VkFlags VkVideoDecodeFlagsKHR;
316 typedef struct VkVideoDecodeInfoKHR {
317     VkStructureType                   sType;
318     const void*                       pNext;
319     VkVideoDecodeFlagsKHR             flags;
320     VkOffset2D                        codedOffset;
321     VkExtent2D                        codedExtent;
322     VkBuffer                          srcBuffer;
323     VkDeviceSize                      srcBufferOffset;
324     VkDeviceSize                      srcBufferRange;
325     VkVideoPictureResourceKHR         dstPictureResource;
326     const VkVideoReferenceSlotKHR*    pSetupReferenceSlot;
327     uint32_t                          referenceSlotCount;
328     const VkVideoReferenceSlotKHR*    pReferenceSlots;
329 } VkVideoDecodeInfoKHR;
330 
331 typedef void (VKAPI_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo);
332 
333 #ifndef VK_NO_PROTOTYPES
334 VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR(
335     VkCommandBuffer                             commandBuffer,
336     const VkVideoDecodeInfoKHR*                 pFrameInfo);
337 #endif
338 
339 
340 #define VK_KHR_portability_subset 1
341 #define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1
342 #define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset"
343 typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR {
344     VkStructureType    sType;
345     void*              pNext;
346     VkBool32           constantAlphaColorBlendFactors;
347     VkBool32           events;
348     VkBool32           imageViewFormatReinterpretation;
349     VkBool32           imageViewFormatSwizzle;
350     VkBool32           imageView2DOn3DImage;
351     VkBool32           multisampleArrayImage;
352     VkBool32           mutableComparisonSamplers;
353     VkBool32           pointPolygons;
354     VkBool32           samplerMipLodBias;
355     VkBool32           separateStencilMaskRef;
356     VkBool32           shaderSampleRateInterpolationFunctions;
357     VkBool32           tessellationIsolines;
358     VkBool32           tessellationPointMode;
359     VkBool32           triangleFans;
360     VkBool32           vertexAttributeAccessBeyondStride;
361 } VkPhysicalDevicePortabilitySubsetFeaturesKHR;
362 
363 typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR {
364     VkStructureType    sType;
365     void*              pNext;
366     uint32_t           minVertexInputBindingStrideAlignment;
367 } VkPhysicalDevicePortabilitySubsetPropertiesKHR;
368 
369 
370 
371 #define VK_KHR_video_encode_queue 1
372 #define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 3
373 #define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue"
374 
375 typedef enum VkVideoEncodeFlagBitsKHR {
376     VK_VIDEO_ENCODE_DEFAULT_KHR = 0,
377     VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR = 0x00000001,
378     VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
379 } VkVideoEncodeFlagBitsKHR;
380 typedef VkFlags VkVideoEncodeFlagsKHR;
381 
382 typedef enum VkVideoEncodeRateControlFlagBitsKHR {
383     VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR = 0,
384     VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR = 0x00000001,
385     VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
386 } VkVideoEncodeRateControlFlagBitsKHR;
387 typedef VkFlags VkVideoEncodeRateControlFlagsKHR;
388 
389 typedef enum VkVideoEncodeRateControlModeFlagBitsKHR {
390     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR = 0,
391     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 1,
392     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 2,
393     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
394 } VkVideoEncodeRateControlModeFlagBitsKHR;
395 typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR;
396 typedef struct VkVideoEncodeInfoKHR {
397     VkStructureType                   sType;
398     const void*                       pNext;
399     VkVideoEncodeFlagsKHR             flags;
400     uint32_t                          qualityLevel;
401     VkExtent2D                        codedExtent;
402     VkBuffer                          dstBitstreamBuffer;
403     VkDeviceSize                      dstBitstreamBufferOffset;
404     VkDeviceSize                      dstBitstreamBufferMaxRange;
405     VkVideoPictureResourceKHR         srcPictureResource;
406     const VkVideoReferenceSlotKHR*    pSetupReferenceSlot;
407     uint32_t                          referenceSlotCount;
408     const VkVideoReferenceSlotKHR*    pReferenceSlots;
409 } VkVideoEncodeInfoKHR;
410 
411 typedef struct VkVideoEncodeRateControlInfoKHR {
412     VkStructureType                            sType;
413     const void*                                pNext;
414     VkVideoEncodeRateControlFlagsKHR           flags;
415     VkVideoEncodeRateControlModeFlagBitsKHR    rateControlMode;
416     uint32_t                                   averageBitrate;
417     uint16_t                                   peakToAverageBitrateRatio;
418     uint16_t                                   frameRateNumerator;
419     uint16_t                                   frameRateDenominator;
420     uint32_t                                   virtualBufferSizeInMs;
421 } VkVideoEncodeRateControlInfoKHR;
422 
423 typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo);
424 
425 #ifndef VK_NO_PROTOTYPES
426 VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR(
427     VkCommandBuffer                             commandBuffer,
428     const VkVideoEncodeInfoKHR*                 pEncodeInfo);
429 #endif
430 
431 
432 #define VK_EXT_video_encode_h264 1
433 #include "vk_video/vulkan_video_codec_h264std.h"
434 #include "vk_video/vulkan_video_codec_h264std_encode.h"
435 #define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 2
436 #define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264"
437 
438 typedef enum VkVideoEncodeH264CapabilityFlagBitsEXT {
439     VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00000001,
440     VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00000002,
441     VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT = 0x00000004,
442     VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00000008,
443     VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000010,
444     VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000020,
445     VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00000040,
446     VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00000080,
447     VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00000100,
448     VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00000200,
449     VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT = 0x00000400,
450     VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
451 } VkVideoEncodeH264CapabilityFlagBitsEXT;
452 typedef VkFlags VkVideoEncodeH264CapabilityFlagsEXT;
453 
454 typedef enum VkVideoEncodeH264InputModeFlagBitsEXT {
455     VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
456     VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT = 0x00000002,
457     VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
458     VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
459 } VkVideoEncodeH264InputModeFlagBitsEXT;
460 typedef VkFlags VkVideoEncodeH264InputModeFlagsEXT;
461 
462 typedef enum VkVideoEncodeH264OutputModeFlagBitsEXT {
463     VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
464     VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT = 0x00000002,
465     VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
466     VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
467 } VkVideoEncodeH264OutputModeFlagBitsEXT;
468 typedef VkFlags VkVideoEncodeH264OutputModeFlagsEXT;
469 
470 typedef enum VkVideoEncodeH264CreateFlagBitsEXT {
471     VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT = 0,
472     VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT = 0x00000001,
473     VK_VIDEO_ENCODE_H264_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
474 } VkVideoEncodeH264CreateFlagBitsEXT;
475 typedef VkFlags VkVideoEncodeH264CreateFlagsEXT;
476 typedef struct VkVideoEncodeH264CapabilitiesEXT {
477     VkStructureType                        sType;
478     const void*                            pNext;
479     VkVideoEncodeH264CapabilityFlagsEXT    flags;
480     VkVideoEncodeH264InputModeFlagsEXT     inputModeFlags;
481     VkVideoEncodeH264OutputModeFlagsEXT    outputModeFlags;
482     VkExtent2D                             minPictureSizeInMbs;
483     VkExtent2D                             maxPictureSizeInMbs;
484     VkExtent2D                             inputImageDataAlignment;
485     uint8_t                                maxNumL0ReferenceForP;
486     uint8_t                                maxNumL0ReferenceForB;
487     uint8_t                                maxNumL1Reference;
488     uint8_t                                qualityLevelCount;
489     VkExtensionProperties                  stdExtensionVersion;
490 } VkVideoEncodeH264CapabilitiesEXT;
491 
492 typedef struct VkVideoEncodeH264SessionCreateInfoEXT {
493     VkStructureType                    sType;
494     const void*                        pNext;
495     VkVideoEncodeH264CreateFlagsEXT    flags;
496     VkExtent2D                         maxPictureSizeInMbs;
497     const VkExtensionProperties*       pStdExtensionVersion;
498 } VkVideoEncodeH264SessionCreateInfoEXT;
499 
500 typedef struct VkVideoEncodeH264SessionParametersAddInfoEXT {
501     VkStructureType                            sType;
502     const void*                                pNext;
503     uint32_t                                   spsStdCount;
504     const StdVideoH264SequenceParameterSet*    pSpsStd;
505     uint32_t                                   ppsStdCount;
506     const StdVideoH264PictureParameterSet*     pPpsStd;
507 } VkVideoEncodeH264SessionParametersAddInfoEXT;
508 
509 typedef struct VkVideoEncodeH264SessionParametersCreateInfoEXT {
510     VkStructureType                                        sType;
511     const void*                                            pNext;
512     uint32_t                                               maxSpsStdCount;
513     uint32_t                                               maxPpsStdCount;
514     const VkVideoEncodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
515 } VkVideoEncodeH264SessionParametersCreateInfoEXT;
516 
517 typedef struct VkVideoEncodeH264DpbSlotInfoEXT {
518     VkStructureType                         sType;
519     const void*                             pNext;
520     int8_t                                  slotIndex;
521     const StdVideoEncodeH264PictureInfo*    pStdPictureInfo;
522 } VkVideoEncodeH264DpbSlotInfoEXT;
523 
524 typedef struct VkVideoEncodeH264NaluSliceEXT {
525     VkStructureType                           sType;
526     const void*                               pNext;
527     const StdVideoEncodeH264SliceHeader*      pSliceHeaderStd;
528     uint32_t                                  mbCount;
529     uint8_t                                   refFinalList0EntryCount;
530     const VkVideoEncodeH264DpbSlotInfoEXT*    pRefFinalList0Entries;
531     uint8_t                                   refFinalList1EntryCount;
532     const VkVideoEncodeH264DpbSlotInfoEXT*    pRefFinalList1Entries;
533     uint32_t                                  precedingNaluBytes;
534     uint8_t                                   minQp;
535     uint8_t                                   maxQp;
536 } VkVideoEncodeH264NaluSliceEXT;
537 
538 typedef struct VkVideoEncodeH264VclFrameInfoEXT {
539     VkStructureType                           sType;
540     const void*                               pNext;
541     uint8_t                                   refDefaultFinalList0EntryCount;
542     const VkVideoEncodeH264DpbSlotInfoEXT*    pRefDefaultFinalList0Entries;
543     uint8_t                                   refDefaultFinalList1EntryCount;
544     const VkVideoEncodeH264DpbSlotInfoEXT*    pRefDefaultFinalList1Entries;
545     uint32_t                                  naluSliceEntryCount;
546     const VkVideoEncodeH264NaluSliceEXT*      pNaluSliceEntries;
547     const VkVideoEncodeH264DpbSlotInfoEXT*    pCurrentPictureInfo;
548 } VkVideoEncodeH264VclFrameInfoEXT;
549 
550 typedef struct VkVideoEncodeH264EmitPictureParametersEXT {
551     VkStructureType    sType;
552     const void*        pNext;
553     uint8_t            spsId;
554     VkBool32           emitSpsEnable;
555     uint32_t           ppsIdEntryCount;
556     const uint8_t*     ppsIdEntries;
557 } VkVideoEncodeH264EmitPictureParametersEXT;
558 
559 typedef struct VkVideoEncodeH264ProfileEXT {
560     VkStructureType           sType;
561     const void*               pNext;
562     StdVideoH264ProfileIdc    stdProfileIdc;
563 } VkVideoEncodeH264ProfileEXT;
564 
565 
566 
567 #define VK_EXT_video_decode_h264 1
568 #include "vk_video/vulkan_video_codec_h264std_decode.h"
569 #define VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION 3
570 #define VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME "VK_EXT_video_decode_h264"
571 
572 typedef enum VkVideoDecodeH264PictureLayoutFlagBitsEXT {
573     VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT = 0,
574     VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT = 0x00000001,
575     VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT = 0x00000002,
576     VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
577 } VkVideoDecodeH264PictureLayoutFlagBitsEXT;
578 typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsEXT;
579 typedef VkFlags VkVideoDecodeH264CreateFlagsEXT;
580 typedef struct VkVideoDecodeH264ProfileEXT {
581     VkStructureType                           sType;
582     const void*                               pNext;
583     StdVideoH264ProfileIdc                    stdProfileIdc;
584     VkVideoDecodeH264PictureLayoutFlagsEXT    pictureLayout;
585 } VkVideoDecodeH264ProfileEXT;
586 
587 typedef struct VkVideoDecodeH264CapabilitiesEXT {
588     VkStructureType          sType;
589     void*                    pNext;
590     uint32_t                 maxLevel;
591     VkOffset2D               fieldOffsetGranularity;
592     VkExtensionProperties    stdExtensionVersion;
593 } VkVideoDecodeH264CapabilitiesEXT;
594 
595 typedef struct VkVideoDecodeH264SessionCreateInfoEXT {
596     VkStructureType                    sType;
597     const void*                        pNext;
598     VkVideoDecodeH264CreateFlagsEXT    flags;
599     const VkExtensionProperties*       pStdExtensionVersion;
600 } VkVideoDecodeH264SessionCreateInfoEXT;
601 
602 typedef struct VkVideoDecodeH264SessionParametersAddInfoEXT {
603     VkStructureType                            sType;
604     const void*                                pNext;
605     uint32_t                                   spsStdCount;
606     const StdVideoH264SequenceParameterSet*    pSpsStd;
607     uint32_t                                   ppsStdCount;
608     const StdVideoH264PictureParameterSet*     pPpsStd;
609 } VkVideoDecodeH264SessionParametersAddInfoEXT;
610 
611 typedef struct VkVideoDecodeH264SessionParametersCreateInfoEXT {
612     VkStructureType                                        sType;
613     const void*                                            pNext;
614     uint32_t                                               maxSpsStdCount;
615     uint32_t                                               maxPpsStdCount;
616     const VkVideoDecodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
617 } VkVideoDecodeH264SessionParametersCreateInfoEXT;
618 
619 typedef struct VkVideoDecodeH264PictureInfoEXT {
620     VkStructureType                         sType;
621     const void*                             pNext;
622     const StdVideoDecodeH264PictureInfo*    pStdPictureInfo;
623     uint32_t                                slicesCount;
624     const uint32_t*                         pSlicesDataOffsets;
625 } VkVideoDecodeH264PictureInfoEXT;
626 
627 typedef struct VkVideoDecodeH264MvcEXT {
628     VkStructureType                 sType;
629     const void*                     pNext;
630     const StdVideoDecodeH264Mvc*    pStdMvc;
631 } VkVideoDecodeH264MvcEXT;
632 
633 typedef struct VkVideoDecodeH264DpbSlotInfoEXT {
634     VkStructureType                           sType;
635     const void*                               pNext;
636     const StdVideoDecodeH264ReferenceInfo*    pStdReferenceInfo;
637 } VkVideoDecodeH264DpbSlotInfoEXT;
638 
639 
640 
641 #define VK_EXT_video_decode_h265 1
642 #include "vk_video/vulkan_video_codec_h265std.h"
643 #include "vk_video/vulkan_video_codec_h265std_decode.h"
644 #define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 1
645 #define VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME "VK_EXT_video_decode_h265"
646 typedef VkFlags VkVideoDecodeH265CreateFlagsEXT;
647 typedef struct VkVideoDecodeH265ProfileEXT {
648     VkStructureType           sType;
649     const void*               pNext;
650     StdVideoH265ProfileIdc    stdProfileIdc;
651 } VkVideoDecodeH265ProfileEXT;
652 
653 typedef struct VkVideoDecodeH265CapabilitiesEXT {
654     VkStructureType          sType;
655     void*                    pNext;
656     uint32_t                 maxLevel;
657     VkExtensionProperties    stdExtensionVersion;
658 } VkVideoDecodeH265CapabilitiesEXT;
659 
660 typedef struct VkVideoDecodeH265SessionCreateInfoEXT {
661     VkStructureType                    sType;
662     const void*                        pNext;
663     VkVideoDecodeH265CreateFlagsEXT    flags;
664     const VkExtensionProperties*       pStdExtensionVersion;
665 } VkVideoDecodeH265SessionCreateInfoEXT;
666 
667 typedef struct VkVideoDecodeH265SessionParametersAddInfoEXT {
668     VkStructureType                            sType;
669     const void*                                pNext;
670     uint32_t                                   spsStdCount;
671     const StdVideoH265SequenceParameterSet*    pSpsStd;
672     uint32_t                                   ppsStdCount;
673     const StdVideoH265PictureParameterSet*     pPpsStd;
674 } VkVideoDecodeH265SessionParametersAddInfoEXT;
675 
676 typedef struct VkVideoDecodeH265SessionParametersCreateInfoEXT {
677     VkStructureType                                        sType;
678     const void*                                            pNext;
679     uint32_t                                               maxSpsStdCount;
680     uint32_t                                               maxPpsStdCount;
681     const VkVideoDecodeH265SessionParametersAddInfoEXT*    pParametersAddInfo;
682 } VkVideoDecodeH265SessionParametersCreateInfoEXT;
683 
684 typedef struct VkVideoDecodeH265PictureInfoEXT {
685     VkStructureType                   sType;
686     const void*                       pNext;
687     StdVideoDecodeH265PictureInfo*    pStdPictureInfo;
688     uint32_t                          slicesCount;
689     const uint32_t*                   pSlicesDataOffsets;
690 } VkVideoDecodeH265PictureInfoEXT;
691 
692 typedef struct VkVideoDecodeH265DpbSlotInfoEXT {
693     VkStructureType                           sType;
694     const void*                               pNext;
695     const StdVideoDecodeH265ReferenceInfo*    pStdReferenceInfo;
696 } VkVideoDecodeH265DpbSlotInfoEXT;
697 
698 
699 #ifdef __cplusplus
700 }
701 #endif
702 
703 #endif
704