• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
17 extern "C" {
18 #endif
19 
20 
21 
22 #define VK_KHR_portability_subset 1
23 #define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1
24 #define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset"
25 typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR {
26     VkStructureType    sType;
27     void*              pNext;
28     VkBool32           constantAlphaColorBlendFactors;
29     VkBool32           events;
30     VkBool32           imageViewFormatReinterpretation;
31     VkBool32           imageViewFormatSwizzle;
32     VkBool32           imageView2DOn3DImage;
33     VkBool32           multisampleArrayImage;
34     VkBool32           mutableComparisonSamplers;
35     VkBool32           pointPolygons;
36     VkBool32           samplerMipLodBias;
37     VkBool32           separateStencilMaskRef;
38     VkBool32           shaderSampleRateInterpolationFunctions;
39     VkBool32           tessellationIsolines;
40     VkBool32           tessellationPointMode;
41     VkBool32           triangleFans;
42     VkBool32           vertexAttributeAccessBeyondStride;
43 } VkPhysicalDevicePortabilitySubsetFeaturesKHR;
44 
45 typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR {
46     VkStructureType    sType;
47     void*              pNext;
48     uint32_t           minVertexInputBindingStrideAlignment;
49 } VkPhysicalDevicePortabilitySubsetPropertiesKHR;
50 
51 
52 
53 #define VK_KHR_video_encode_queue 1
54 #define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 7
55 #define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue"
56 
57 typedef enum VkVideoEncodeTuningModeKHR {
58     VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR = 0,
59     VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR = 1,
60     VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR = 2,
61     VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR = 3,
62     VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR = 4,
63     VK_VIDEO_ENCODE_TUNING_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
64 } VkVideoEncodeTuningModeKHR;
65 typedef VkFlags VkVideoEncodeFlagsKHR;
66 
67 typedef enum VkVideoEncodeCapabilityFlagBitsKHR {
68     VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR = 0x00000001,
69     VK_VIDEO_ENCODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
70 } VkVideoEncodeCapabilityFlagBitsKHR;
71 typedef VkFlags VkVideoEncodeCapabilityFlagsKHR;
72 
73 typedef enum VkVideoEncodeRateControlModeFlagBitsKHR {
74     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR = 0,
75     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 1,
76     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 2,
77     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
78 } VkVideoEncodeRateControlModeFlagBitsKHR;
79 typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR;
80 
81 typedef enum VkVideoEncodeUsageFlagBitsKHR {
82     VK_VIDEO_ENCODE_USAGE_DEFAULT_KHR = 0,
83     VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR = 0x00000001,
84     VK_VIDEO_ENCODE_USAGE_STREAMING_BIT_KHR = 0x00000002,
85     VK_VIDEO_ENCODE_USAGE_RECORDING_BIT_KHR = 0x00000004,
86     VK_VIDEO_ENCODE_USAGE_CONFERENCING_BIT_KHR = 0x00000008,
87     VK_VIDEO_ENCODE_USAGE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
88 } VkVideoEncodeUsageFlagBitsKHR;
89 typedef VkFlags VkVideoEncodeUsageFlagsKHR;
90 
91 typedef enum VkVideoEncodeContentFlagBitsKHR {
92     VK_VIDEO_ENCODE_CONTENT_DEFAULT_KHR = 0,
93     VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR = 0x00000001,
94     VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR = 0x00000002,
95     VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR = 0x00000004,
96     VK_VIDEO_ENCODE_CONTENT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
97 } VkVideoEncodeContentFlagBitsKHR;
98 typedef VkFlags VkVideoEncodeContentFlagsKHR;
99 typedef VkFlags VkVideoEncodeRateControlFlagsKHR;
100 typedef struct VkVideoEncodeInfoKHR {
101     VkStructureType                       sType;
102     const void*                           pNext;
103     VkVideoEncodeFlagsKHR                 flags;
104     uint32_t                              qualityLevel;
105     VkBuffer                              dstBitstreamBuffer;
106     VkDeviceSize                          dstBitstreamBufferOffset;
107     VkDeviceSize                          dstBitstreamBufferMaxRange;
108     VkVideoPictureResourceInfoKHR         srcPictureResource;
109     const VkVideoReferenceSlotInfoKHR*    pSetupReferenceSlot;
110     uint32_t                              referenceSlotCount;
111     const VkVideoReferenceSlotInfoKHR*    pReferenceSlots;
112     uint32_t                              precedingExternallyEncodedBytes;
113 } VkVideoEncodeInfoKHR;
114 
115 typedef struct VkVideoEncodeCapabilitiesKHR {
116     VkStructureType                         sType;
117     void*                                   pNext;
118     VkVideoEncodeCapabilityFlagsKHR         flags;
119     VkVideoEncodeRateControlModeFlagsKHR    rateControlModes;
120     uint8_t                                 rateControlLayerCount;
121     uint8_t                                 qualityLevelCount;
122     VkExtent2D                              inputImageDataFillAlignment;
123 } VkVideoEncodeCapabilitiesKHR;
124 
125 typedef struct VkVideoEncodeUsageInfoKHR {
126     VkStructureType                 sType;
127     const void*                     pNext;
128     VkVideoEncodeUsageFlagsKHR      videoUsageHints;
129     VkVideoEncodeContentFlagsKHR    videoContentHints;
130     VkVideoEncodeTuningModeKHR      tuningMode;
131 } VkVideoEncodeUsageInfoKHR;
132 
133 typedef struct VkVideoEncodeRateControlLayerInfoKHR {
134     VkStructureType    sType;
135     const void*        pNext;
136     uint32_t           averageBitrate;
137     uint32_t           maxBitrate;
138     uint32_t           frameRateNumerator;
139     uint32_t           frameRateDenominator;
140     uint32_t           virtualBufferSizeInMs;
141     uint32_t           initialVirtualBufferSizeInMs;
142 } VkVideoEncodeRateControlLayerInfoKHR;
143 
144 typedef struct VkVideoEncodeRateControlInfoKHR {
145     VkStructureType                                sType;
146     const void*                                    pNext;
147     VkVideoEncodeRateControlFlagsKHR               flags;
148     VkVideoEncodeRateControlModeFlagBitsKHR        rateControlMode;
149     uint8_t                                        layerCount;
150     const VkVideoEncodeRateControlLayerInfoKHR*    pLayerConfigs;
151 } VkVideoEncodeRateControlInfoKHR;
152 
153 typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo);
154 
155 #ifndef VK_NO_PROTOTYPES
156 VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR(
157     VkCommandBuffer                             commandBuffer,
158     const VkVideoEncodeInfoKHR*                 pEncodeInfo);
159 #endif
160 
161 
162 #define VK_EXT_video_encode_h264 1
163 #include "vk_video/vulkan_video_codec_h264std.h"
164 #include "vk_video/vulkan_video_codec_h264std_encode.h"
165 #define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 9
166 #define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264"
167 
168 typedef enum VkVideoEncodeH264RateControlStructureEXT {
169     VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0,
170     VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_EXT = 1,
171     VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_EXT = 2,
172     VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_MAX_ENUM_EXT = 0x7FFFFFFF
173 } VkVideoEncodeH264RateControlStructureEXT;
174 
175 typedef enum VkVideoEncodeH264CapabilityFlagBitsEXT {
176     VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_ENABLED_BIT_EXT = 0x00000001,
177     VK_VIDEO_ENCODE_H264_CAPABILITY_DIRECT_8X8_INFERENCE_DISABLED_BIT_EXT = 0x00000002,
178     VK_VIDEO_ENCODE_H264_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000004,
179     VK_VIDEO_ENCODE_H264_CAPABILITY_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_BIT_EXT = 0x00000008,
180     VK_VIDEO_ENCODE_H264_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000010,
181     VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000020,
182     VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000040,
183     VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000080,
184     VK_VIDEO_ENCODE_H264_CAPABILITY_PIC_INIT_QP_MINUS26_BIT_EXT = 0x00000100,
185     VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00000200,
186     VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_EXPLICIT_BIT_EXT = 0x00000400,
187     VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BIPRED_IMPLICIT_BIT_EXT = 0x00000800,
188     VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00001000,
189     VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00002000,
190     VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00004000,
191     VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00008000,
192     VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00010000,
193     VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00020000,
194     VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00040000,
195     VK_VIDEO_ENCODE_H264_CAPABILITY_DISABLE_DIRECT_SPATIAL_MV_PRED_BIT_EXT = 0x00080000,
196     VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00100000,
197     VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT = 0x00200000,
198     VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT = 0x00400000,
199     VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x00800000,
200     VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x01000000,
201     VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
202 } VkVideoEncodeH264CapabilityFlagBitsEXT;
203 typedef VkFlags VkVideoEncodeH264CapabilityFlagsEXT;
204 
205 typedef enum VkVideoEncodeH264InputModeFlagBitsEXT {
206     VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
207     VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT = 0x00000002,
208     VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
209     VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
210 } VkVideoEncodeH264InputModeFlagBitsEXT;
211 typedef VkFlags VkVideoEncodeH264InputModeFlagsEXT;
212 
213 typedef enum VkVideoEncodeH264OutputModeFlagBitsEXT {
214     VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
215     VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT = 0x00000002,
216     VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
217     VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
218 } VkVideoEncodeH264OutputModeFlagBitsEXT;
219 typedef VkFlags VkVideoEncodeH264OutputModeFlagsEXT;
220 typedef struct VkVideoEncodeH264CapabilitiesEXT {
221     VkStructureType                        sType;
222     void*                                  pNext;
223     VkVideoEncodeH264CapabilityFlagsEXT    flags;
224     VkVideoEncodeH264InputModeFlagsEXT     inputModeFlags;
225     VkVideoEncodeH264OutputModeFlagsEXT    outputModeFlags;
226     uint8_t                                maxPPictureL0ReferenceCount;
227     uint8_t                                maxBPictureL0ReferenceCount;
228     uint8_t                                maxL1ReferenceCount;
229     VkBool32                               motionVectorsOverPicBoundariesFlag;
230     uint32_t                               maxBytesPerPicDenom;
231     uint32_t                               maxBitsPerMbDenom;
232     uint32_t                               log2MaxMvLengthHorizontal;
233     uint32_t                               log2MaxMvLengthVertical;
234 } VkVideoEncodeH264CapabilitiesEXT;
235 
236 typedef struct VkVideoEncodeH264SessionParametersAddInfoEXT {
237     VkStructureType                            sType;
238     const void*                                pNext;
239     uint32_t                                   stdSPSCount;
240     const StdVideoH264SequenceParameterSet*    pStdSPSs;
241     uint32_t                                   stdPPSCount;
242     const StdVideoH264PictureParameterSet*     pStdPPSs;
243 } VkVideoEncodeH264SessionParametersAddInfoEXT;
244 
245 typedef struct VkVideoEncodeH264SessionParametersCreateInfoEXT {
246     VkStructureType                                        sType;
247     const void*                                            pNext;
248     uint32_t                                               maxStdSPSCount;
249     uint32_t                                               maxStdPPSCount;
250     const VkVideoEncodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
251 } VkVideoEncodeH264SessionParametersCreateInfoEXT;
252 
253 typedef struct VkVideoEncodeH264DpbSlotInfoEXT {
254     VkStructureType                           sType;
255     const void*                               pNext;
256     int8_t                                    slotIndex;
257     const StdVideoEncodeH264ReferenceInfo*    pStdReferenceInfo;
258 } VkVideoEncodeH264DpbSlotInfoEXT;
259 
260 typedef struct VkVideoEncodeH264ReferenceListsInfoEXT {
261     VkStructureType                                      sType;
262     const void*                                          pNext;
263     uint8_t                                              referenceList0EntryCount;
264     const VkVideoEncodeH264DpbSlotInfoEXT*               pReferenceList0Entries;
265     uint8_t                                              referenceList1EntryCount;
266     const VkVideoEncodeH264DpbSlotInfoEXT*               pReferenceList1Entries;
267     const StdVideoEncodeH264RefMemMgmtCtrlOperations*    pMemMgmtCtrlOperations;
268 } VkVideoEncodeH264ReferenceListsInfoEXT;
269 
270 typedef struct VkVideoEncodeH264NaluSliceInfoEXT {
271     VkStructureType                                  sType;
272     const void*                                      pNext;
273     uint32_t                                         mbCount;
274     const VkVideoEncodeH264ReferenceListsInfoEXT*    pReferenceFinalLists;
275     const StdVideoEncodeH264SliceHeader*             pSliceHeaderStd;
276 } VkVideoEncodeH264NaluSliceInfoEXT;
277 
278 typedef struct VkVideoEncodeH264VclFrameInfoEXT {
279     VkStructureType                                  sType;
280     const void*                                      pNext;
281     const VkVideoEncodeH264ReferenceListsInfoEXT*    pReferenceFinalLists;
282     uint32_t                                         naluSliceEntryCount;
283     const VkVideoEncodeH264NaluSliceInfoEXT*         pNaluSliceEntries;
284     const StdVideoEncodeH264PictureInfo*             pCurrentPictureInfo;
285 } VkVideoEncodeH264VclFrameInfoEXT;
286 
287 typedef struct VkVideoEncodeH264EmitPictureParametersInfoEXT {
288     VkStructureType    sType;
289     const void*        pNext;
290     uint8_t            spsId;
291     VkBool32           emitSpsEnable;
292     uint32_t           ppsIdEntryCount;
293     const uint8_t*     ppsIdEntries;
294 } VkVideoEncodeH264EmitPictureParametersInfoEXT;
295 
296 typedef struct VkVideoEncodeH264ProfileInfoEXT {
297     VkStructureType           sType;
298     const void*               pNext;
299     StdVideoH264ProfileIdc    stdProfileIdc;
300 } VkVideoEncodeH264ProfileInfoEXT;
301 
302 typedef struct VkVideoEncodeH264RateControlInfoEXT {
303     VkStructureType                             sType;
304     const void*                                 pNext;
305     uint32_t                                    gopFrameCount;
306     uint32_t                                    idrPeriod;
307     uint32_t                                    consecutiveBFrameCount;
308     VkVideoEncodeH264RateControlStructureEXT    rateControlStructure;
309     uint8_t                                     temporalLayerCount;
310 } VkVideoEncodeH264RateControlInfoEXT;
311 
312 typedef struct VkVideoEncodeH264QpEXT {
313     int32_t    qpI;
314     int32_t    qpP;
315     int32_t    qpB;
316 } VkVideoEncodeH264QpEXT;
317 
318 typedef struct VkVideoEncodeH264FrameSizeEXT {
319     uint32_t    frameISize;
320     uint32_t    framePSize;
321     uint32_t    frameBSize;
322 } VkVideoEncodeH264FrameSizeEXT;
323 
324 typedef struct VkVideoEncodeH264RateControlLayerInfoEXT {
325     VkStructureType                  sType;
326     const void*                      pNext;
327     uint8_t                          temporalLayerId;
328     VkBool32                         useInitialRcQp;
329     VkVideoEncodeH264QpEXT           initialRcQp;
330     VkBool32                         useMinQp;
331     VkVideoEncodeH264QpEXT           minQp;
332     VkBool32                         useMaxQp;
333     VkVideoEncodeH264QpEXT           maxQp;
334     VkBool32                         useMaxFrameSize;
335     VkVideoEncodeH264FrameSizeEXT    maxFrameSize;
336 } VkVideoEncodeH264RateControlLayerInfoEXT;
337 
338 
339 
340 #define VK_EXT_video_encode_h265 1
341 #include "vk_video/vulkan_video_codec_h265std.h"
342 #include "vk_video/vulkan_video_codec_h265std_encode.h"
343 #define VK_EXT_VIDEO_ENCODE_H265_SPEC_VERSION 9
344 #define VK_EXT_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_EXT_video_encode_h265"
345 
346 typedef enum VkVideoEncodeH265RateControlStructureEXT {
347     VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0,
348     VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_EXT = 1,
349     VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_EXT = 2,
350     VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_MAX_ENUM_EXT = 0x7FFFFFFF
351 } VkVideoEncodeH265RateControlStructureEXT;
352 
353 typedef enum VkVideoEncodeH265CapabilityFlagBitsEXT {
354     VK_VIDEO_ENCODE_H265_CAPABILITY_SEPARATE_COLOUR_PLANE_BIT_EXT = 0x00000001,
355     VK_VIDEO_ENCODE_H265_CAPABILITY_SCALING_LISTS_BIT_EXT = 0x00000002,
356     VK_VIDEO_ENCODE_H265_CAPABILITY_SAMPLE_ADAPTIVE_OFFSET_ENABLED_BIT_EXT = 0x00000004,
357     VK_VIDEO_ENCODE_H265_CAPABILITY_PCM_ENABLE_BIT_EXT = 0x00000008,
358     VK_VIDEO_ENCODE_H265_CAPABILITY_SPS_TEMPORAL_MVP_ENABLED_BIT_EXT = 0x00000010,
359     VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000020,
360     VK_VIDEO_ENCODE_H265_CAPABILITY_INIT_QP_MINUS26_BIT_EXT = 0x00000040,
361     VK_VIDEO_ENCODE_H265_CAPABILITY_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT = 0x00000080,
362     VK_VIDEO_ENCODE_H265_CAPABILITY_SIGN_DATA_HIDING_ENABLED_BIT_EXT = 0x00000100,
363     VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_ENABLED_BIT_EXT = 0x00000200,
364     VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSFORM_SKIP_DISABLED_BIT_EXT = 0x00000400,
365     VK_VIDEO_ENCODE_H265_CAPABILITY_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_BIT_EXT = 0x00000800,
366     VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_BIT_EXT = 0x00001000,
367     VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_BIPRED_BIT_EXT = 0x00002000,
368     VK_VIDEO_ENCODE_H265_CAPABILITY_WEIGHTED_PRED_NO_TABLE_BIT_EXT = 0x00004000,
369     VK_VIDEO_ENCODE_H265_CAPABILITY_TRANSQUANT_BYPASS_ENABLED_BIT_EXT = 0x00008000,
370     VK_VIDEO_ENCODE_H265_CAPABILITY_ENTROPY_CODING_SYNC_ENABLED_BIT_EXT = 0x00010000,
371     VK_VIDEO_ENCODE_H265_CAPABILITY_DEBLOCKING_FILTER_OVERRIDE_ENABLED_BIT_EXT = 0x00020000,
372     VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_FRAME_BIT_EXT = 0x00040000,
373     VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_PER_TILE_BIT_EXT = 0x00080000,
374     VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILE_PER_SLICE_BIT_EXT = 0x00100000,
375     VK_VIDEO_ENCODE_H265_CAPABILITY_SLICE_SEGMENT_CTB_COUNT_BIT_EXT = 0x00200000,
376     VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT = 0x00400000,
377     VK_VIDEO_ENCODE_H265_CAPABILITY_DEPENDENT_SLICE_SEGMENT_BIT_EXT = 0x00800000,
378     VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x01000000,
379     VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x02000000,
380     VK_VIDEO_ENCODE_H265_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
381 } VkVideoEncodeH265CapabilityFlagBitsEXT;
382 typedef VkFlags VkVideoEncodeH265CapabilityFlagsEXT;
383 
384 typedef enum VkVideoEncodeH265InputModeFlagBitsEXT {
385     VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
386     VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002,
387     VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
388     VK_VIDEO_ENCODE_H265_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
389 } VkVideoEncodeH265InputModeFlagBitsEXT;
390 typedef VkFlags VkVideoEncodeH265InputModeFlagsEXT;
391 
392 typedef enum VkVideoEncodeH265OutputModeFlagBitsEXT {
393     VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
394     VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002,
395     VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
396     VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
397 } VkVideoEncodeH265OutputModeFlagBitsEXT;
398 typedef VkFlags VkVideoEncodeH265OutputModeFlagsEXT;
399 
400 typedef enum VkVideoEncodeH265CtbSizeFlagBitsEXT {
401     VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT = 0x00000001,
402     VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT = 0x00000002,
403     VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT = 0x00000004,
404     VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
405 } VkVideoEncodeH265CtbSizeFlagBitsEXT;
406 typedef VkFlags VkVideoEncodeH265CtbSizeFlagsEXT;
407 
408 typedef enum VkVideoEncodeH265TransformBlockSizeFlagBitsEXT {
409     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT = 0x00000001,
410     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT = 0x00000002,
411     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT = 0x00000004,
412     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT = 0x00000008,
413     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
414 } VkVideoEncodeH265TransformBlockSizeFlagBitsEXT;
415 typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsEXT;
416 typedef struct VkVideoEncodeH265CapabilitiesEXT {
417     VkStructureType                                sType;
418     void*                                          pNext;
419     VkVideoEncodeH265CapabilityFlagsEXT            flags;
420     VkVideoEncodeH265InputModeFlagsEXT             inputModeFlags;
421     VkVideoEncodeH265OutputModeFlagsEXT            outputModeFlags;
422     VkVideoEncodeH265CtbSizeFlagsEXT               ctbSizes;
423     VkVideoEncodeH265TransformBlockSizeFlagsEXT    transformBlockSizes;
424     uint8_t                                        maxPPictureL0ReferenceCount;
425     uint8_t                                        maxBPictureL0ReferenceCount;
426     uint8_t                                        maxL1ReferenceCount;
427     uint8_t                                        maxSubLayersCount;
428     uint8_t                                        minLog2MinLumaCodingBlockSizeMinus3;
429     uint8_t                                        maxLog2MinLumaCodingBlockSizeMinus3;
430     uint8_t                                        minLog2MinLumaTransformBlockSizeMinus2;
431     uint8_t                                        maxLog2MinLumaTransformBlockSizeMinus2;
432     uint8_t                                        minMaxTransformHierarchyDepthInter;
433     uint8_t                                        maxMaxTransformHierarchyDepthInter;
434     uint8_t                                        minMaxTransformHierarchyDepthIntra;
435     uint8_t                                        maxMaxTransformHierarchyDepthIntra;
436     uint8_t                                        maxDiffCuQpDeltaDepth;
437     uint8_t                                        minMaxNumMergeCand;
438     uint8_t                                        maxMaxNumMergeCand;
439 } VkVideoEncodeH265CapabilitiesEXT;
440 
441 typedef struct VkVideoEncodeH265SessionParametersAddInfoEXT {
442     VkStructureType                            sType;
443     const void*                                pNext;
444     uint32_t                                   stdVPSCount;
445     const StdVideoH265VideoParameterSet*       pStdVPSs;
446     uint32_t                                   stdSPSCount;
447     const StdVideoH265SequenceParameterSet*    pStdSPSs;
448     uint32_t                                   stdPPSCount;
449     const StdVideoH265PictureParameterSet*     pStdPPSs;
450 } VkVideoEncodeH265SessionParametersAddInfoEXT;
451 
452 typedef struct VkVideoEncodeH265SessionParametersCreateInfoEXT {
453     VkStructureType                                        sType;
454     const void*                                            pNext;
455     uint32_t                                               maxStdVPSCount;
456     uint32_t                                               maxStdSPSCount;
457     uint32_t                                               maxStdPPSCount;
458     const VkVideoEncodeH265SessionParametersAddInfoEXT*    pParametersAddInfo;
459 } VkVideoEncodeH265SessionParametersCreateInfoEXT;
460 
461 typedef struct VkVideoEncodeH265DpbSlotInfoEXT {
462     VkStructureType                           sType;
463     const void*                               pNext;
464     int8_t                                    slotIndex;
465     const StdVideoEncodeH265ReferenceInfo*    pStdReferenceInfo;
466 } VkVideoEncodeH265DpbSlotInfoEXT;
467 
468 typedef struct VkVideoEncodeH265ReferenceListsInfoEXT {
469     VkStructureType                                    sType;
470     const void*                                        pNext;
471     uint8_t                                            referenceList0EntryCount;
472     const VkVideoEncodeH265DpbSlotInfoEXT*             pReferenceList0Entries;
473     uint8_t                                            referenceList1EntryCount;
474     const VkVideoEncodeH265DpbSlotInfoEXT*             pReferenceList1Entries;
475     const StdVideoEncodeH265ReferenceModifications*    pReferenceModifications;
476 } VkVideoEncodeH265ReferenceListsInfoEXT;
477 
478 typedef struct VkVideoEncodeH265NaluSliceSegmentInfoEXT {
479     VkStructureType                                  sType;
480     const void*                                      pNext;
481     uint32_t                                         ctbCount;
482     const VkVideoEncodeH265ReferenceListsInfoEXT*    pReferenceFinalLists;
483     const StdVideoEncodeH265SliceSegmentHeader*      pSliceSegmentHeaderStd;
484 } VkVideoEncodeH265NaluSliceSegmentInfoEXT;
485 
486 typedef struct VkVideoEncodeH265VclFrameInfoEXT {
487     VkStructureType                                    sType;
488     const void*                                        pNext;
489     const VkVideoEncodeH265ReferenceListsInfoEXT*      pReferenceFinalLists;
490     uint32_t                                           naluSliceSegmentEntryCount;
491     const VkVideoEncodeH265NaluSliceSegmentInfoEXT*    pNaluSliceSegmentEntries;
492     const StdVideoEncodeH265PictureInfo*               pCurrentPictureInfo;
493 } VkVideoEncodeH265VclFrameInfoEXT;
494 
495 typedef struct VkVideoEncodeH265EmitPictureParametersInfoEXT {
496     VkStructureType    sType;
497     const void*        pNext;
498     uint8_t            vpsId;
499     uint8_t            spsId;
500     VkBool32           emitVpsEnable;
501     VkBool32           emitSpsEnable;
502     uint32_t           ppsIdEntryCount;
503     const uint8_t*     ppsIdEntries;
504 } VkVideoEncodeH265EmitPictureParametersInfoEXT;
505 
506 typedef struct VkVideoEncodeH265ProfileInfoEXT {
507     VkStructureType           sType;
508     const void*               pNext;
509     StdVideoH265ProfileIdc    stdProfileIdc;
510 } VkVideoEncodeH265ProfileInfoEXT;
511 
512 typedef struct VkVideoEncodeH265RateControlInfoEXT {
513     VkStructureType                             sType;
514     const void*                                 pNext;
515     uint32_t                                    gopFrameCount;
516     uint32_t                                    idrPeriod;
517     uint32_t                                    consecutiveBFrameCount;
518     VkVideoEncodeH265RateControlStructureEXT    rateControlStructure;
519     uint8_t                                     subLayerCount;
520 } VkVideoEncodeH265RateControlInfoEXT;
521 
522 typedef struct VkVideoEncodeH265QpEXT {
523     int32_t    qpI;
524     int32_t    qpP;
525     int32_t    qpB;
526 } VkVideoEncodeH265QpEXT;
527 
528 typedef struct VkVideoEncodeH265FrameSizeEXT {
529     uint32_t    frameISize;
530     uint32_t    framePSize;
531     uint32_t    frameBSize;
532 } VkVideoEncodeH265FrameSizeEXT;
533 
534 typedef struct VkVideoEncodeH265RateControlLayerInfoEXT {
535     VkStructureType                  sType;
536     const void*                      pNext;
537     uint8_t                          temporalId;
538     VkBool32                         useInitialRcQp;
539     VkVideoEncodeH265QpEXT           initialRcQp;
540     VkBool32                         useMinQp;
541     VkVideoEncodeH265QpEXT           minQp;
542     VkBool32                         useMaxQp;
543     VkVideoEncodeH265QpEXT           maxQp;
544     VkBool32                         useMaxFrameSize;
545     VkVideoEncodeH265FrameSizeEXT    maxFrameSize;
546 } VkVideoEncodeH265RateControlLayerInfoEXT;
547 
548 
549 #ifdef __cplusplus
550 }
551 #endif
552 
553 #endif
554