1 #ifndef VULKAN_BETA_H_
2 #define VULKAN_BETA_H_ 1
3 
4 /*
5 ** Copyright 2015-2023 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 // VK_KHR_portability_subset is a preprocessor guard. Do not pass it to API calls.
23 #define VK_KHR_portability_subset 1
24 #define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1
25 #define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset"
26 typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR {
27     VkStructureType    sType;
28     void*              pNext;
29     VkBool32           constantAlphaColorBlendFactors;
30     VkBool32           events;
31     VkBool32           imageViewFormatReinterpretation;
32     VkBool32           imageViewFormatSwizzle;
33     VkBool32           imageView2DOn3DImage;
34     VkBool32           multisampleArrayImage;
35     VkBool32           mutableComparisonSamplers;
36     VkBool32           pointPolygons;
37     VkBool32           samplerMipLodBias;
38     VkBool32           separateStencilMaskRef;
39     VkBool32           shaderSampleRateInterpolationFunctions;
40     VkBool32           tessellationIsolines;
41     VkBool32           tessellationPointMode;
42     VkBool32           triangleFans;
43     VkBool32           vertexAttributeAccessBeyondStride;
44 } VkPhysicalDevicePortabilitySubsetFeaturesKHR;
45 
46 typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR {
47     VkStructureType    sType;
48     void*              pNext;
49     uint32_t           minVertexInputBindingStrideAlignment;
50 } VkPhysicalDevicePortabilitySubsetPropertiesKHR;
51 
52 
53 
54 // VK_KHR_video_encode_queue is a preprocessor guard. Do not pass it to API calls.
55 #define VK_KHR_video_encode_queue 1
56 #define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 9
57 #define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue"
58 
59 typedef enum VkVideoEncodeTuningModeKHR {
60     VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR = 0,
61     VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR = 1,
62     VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR = 2,
63     VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR = 3,
64     VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR = 4,
65     VK_VIDEO_ENCODE_TUNING_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
66 } VkVideoEncodeTuningModeKHR;
67 typedef VkFlags VkVideoEncodeFlagsKHR;
68 
69 typedef enum VkVideoEncodeCapabilityFlagBitsKHR {
70     VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR = 0x00000001,
71     VK_VIDEO_ENCODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
72 } VkVideoEncodeCapabilityFlagBitsKHR;
73 typedef VkFlags VkVideoEncodeCapabilityFlagsKHR;
74 
75 typedef enum VkVideoEncodeRateControlModeFlagBitsKHR {
76     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR = 0,
77     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR = 0x00000001,
78     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 0x00000002,
79     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 0x00000004,
80     VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
81 } VkVideoEncodeRateControlModeFlagBitsKHR;
82 typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR;
83 
84 typedef enum VkVideoEncodeFeedbackFlagBitsKHR {
85     VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR = 0x00000001,
86     VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR = 0x00000002,
87     VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR = 0x00000004,
88     VK_VIDEO_ENCODE_FEEDBACK_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
89 } VkVideoEncodeFeedbackFlagBitsKHR;
90 typedef VkFlags VkVideoEncodeFeedbackFlagsKHR;
91 
92 typedef enum VkVideoEncodeUsageFlagBitsKHR {
93     VK_VIDEO_ENCODE_USAGE_DEFAULT_KHR = 0,
94     VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR = 0x00000001,
95     VK_VIDEO_ENCODE_USAGE_STREAMING_BIT_KHR = 0x00000002,
96     VK_VIDEO_ENCODE_USAGE_RECORDING_BIT_KHR = 0x00000004,
97     VK_VIDEO_ENCODE_USAGE_CONFERENCING_BIT_KHR = 0x00000008,
98     VK_VIDEO_ENCODE_USAGE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
99 } VkVideoEncodeUsageFlagBitsKHR;
100 typedef VkFlags VkVideoEncodeUsageFlagsKHR;
101 
102 typedef enum VkVideoEncodeContentFlagBitsKHR {
103     VK_VIDEO_ENCODE_CONTENT_DEFAULT_KHR = 0,
104     VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR = 0x00000001,
105     VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR = 0x00000002,
106     VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR = 0x00000004,
107     VK_VIDEO_ENCODE_CONTENT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
108 } VkVideoEncodeContentFlagBitsKHR;
109 typedef VkFlags VkVideoEncodeContentFlagsKHR;
110 typedef VkFlags VkVideoEncodeRateControlFlagsKHR;
111 typedef struct VkVideoEncodeInfoKHR {
112     VkStructureType                       sType;
113     const void*                           pNext;
114     VkVideoEncodeFlagsKHR                 flags;
115     VkBuffer                              dstBuffer;
116     VkDeviceSize                          dstBufferOffset;
117     VkDeviceSize                          dstBufferRange;
118     VkVideoPictureResourceInfoKHR         srcPictureResource;
119     const VkVideoReferenceSlotInfoKHR*    pSetupReferenceSlot;
120     uint32_t                              referenceSlotCount;
121     const VkVideoReferenceSlotInfoKHR*    pReferenceSlots;
122     uint32_t                              precedingExternallyEncodedBytes;
123 } VkVideoEncodeInfoKHR;
124 
125 typedef struct VkVideoEncodeCapabilitiesKHR {
126     VkStructureType                         sType;
127     void*                                   pNext;
128     VkVideoEncodeCapabilityFlagsKHR         flags;
129     VkVideoEncodeRateControlModeFlagsKHR    rateControlModes;
130     uint32_t                                maxRateControlLayers;
131     uint64_t                                maxBitrate;
132     uint32_t                                maxQualityLevels;
133     VkExtent2D                              encodeInputPictureGranularity;
134     VkVideoEncodeFeedbackFlagsKHR           supportedEncodeFeedbackFlags;
135 } VkVideoEncodeCapabilitiesKHR;
136 
137 typedef struct VkQueryPoolVideoEncodeFeedbackCreateInfoKHR {
138     VkStructureType                  sType;
139     const void*                      pNext;
140     VkVideoEncodeFeedbackFlagsKHR    encodeFeedbackFlags;
141 } VkQueryPoolVideoEncodeFeedbackCreateInfoKHR;
142 
143 typedef struct VkVideoEncodeUsageInfoKHR {
144     VkStructureType                 sType;
145     const void*                     pNext;
146     VkVideoEncodeUsageFlagsKHR      videoUsageHints;
147     VkVideoEncodeContentFlagsKHR    videoContentHints;
148     VkVideoEncodeTuningModeKHR      tuningMode;
149 } VkVideoEncodeUsageInfoKHR;
150 
151 typedef struct VkVideoEncodeRateControlLayerInfoKHR {
152     VkStructureType    sType;
153     const void*        pNext;
154     uint64_t           averageBitrate;
155     uint64_t           maxBitrate;
156     uint32_t           frameRateNumerator;
157     uint32_t           frameRateDenominator;
158 } VkVideoEncodeRateControlLayerInfoKHR;
159 
160 typedef struct VkVideoEncodeRateControlInfoKHR {
161     VkStructureType                                sType;
162     const void*                                    pNext;
163     VkVideoEncodeRateControlFlagsKHR               flags;
164     VkVideoEncodeRateControlModeFlagBitsKHR        rateControlMode;
165     uint32_t                                       layerCount;
166     const VkVideoEncodeRateControlLayerInfoKHR*    pLayers;
167     uint32_t                                       virtualBufferSizeInMs;
168     uint32_t                                       initialVirtualBufferSizeInMs;
169 } VkVideoEncodeRateControlInfoKHR;
170 
171 typedef struct VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR {
172     VkStructureType                 sType;
173     const void*                     pNext;
174     const VkVideoProfileInfoKHR*    pVideoProfile;
175     uint32_t                        qualityLevel;
176 } VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR;
177 
178 typedef struct VkVideoEncodeQualityLevelPropertiesKHR {
179     VkStructureType                            sType;
180     void*                                      pNext;
181     VkVideoEncodeRateControlModeFlagBitsKHR    preferredRateControlMode;
182     uint32_t                                   preferredRateControlLayerCount;
183 } VkVideoEncodeQualityLevelPropertiesKHR;
184 
185 typedef struct VkVideoEncodeQualityLevelInfoKHR {
186     VkStructureType    sType;
187     const void*        pNext;
188     uint32_t           qualityLevel;
189 } VkVideoEncodeQualityLevelInfoKHR;
190 
191 typedef struct VkVideoEncodeSessionParametersGetInfoKHR {
192     VkStructureType                sType;
193     const void*                    pNext;
194     VkVideoSessionParametersKHR    videoSessionParameters;
195 } VkVideoEncodeSessionParametersGetInfoKHR;
196 
197 typedef struct VkVideoEncodeSessionParametersFeedbackInfoKHR {
198     VkStructureType    sType;
199     void*              pNext;
200     VkBool32           hasOverrides;
201 } VkVideoEncodeSessionParametersFeedbackInfoKHR;
202 
203 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties);
204 typedef VkResult (VKAPI_PTR *PFN_vkGetEncodedVideoSessionParametersKHR)(VkDevice device, const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo, VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo, size_t* pDataSize, void* pData);
205 typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo);
206 
207 #ifndef VK_NO_PROTOTYPES
208 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR(
209     VkPhysicalDevice                            physicalDevice,
210     const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo,
211     VkVideoEncodeQualityLevelPropertiesKHR*     pQualityLevelProperties);
212 
213 VKAPI_ATTR VkResult VKAPI_CALL vkGetEncodedVideoSessionParametersKHR(
214     VkDevice                                    device,
215     const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo,
216     VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo,
217     size_t*                                     pDataSize,
218     void*                                       pData);
219 
220 VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR(
221     VkCommandBuffer                             commandBuffer,
222     const VkVideoEncodeInfoKHR*                 pEncodeInfo);
223 #endif
224 
225 
226 // VK_EXT_video_encode_h264 is a preprocessor guard. Do not pass it to API calls.
227 #define VK_EXT_video_encode_h264 1
228 #include "vk_video/vulkan_video_codec_h264std.h"
229 #include "vk_video/vulkan_video_codec_h264std_encode.h"
230 #define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 11
231 #define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264"
232 
233 typedef enum VkVideoEncodeH264CapabilityFlagBitsEXT {
234     VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000001,
235     VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_EXT = 0x00000002,
236     VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT = 0x00000004,
237     VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT = 0x00000008,
238     VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT = 0x00000010,
239     VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x00000020,
240     VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_EXT = 0x00000040,
241     VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_EXT = 0x00000080,
242     VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_EXT = 0x00000100,
243     VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
244 } VkVideoEncodeH264CapabilityFlagBitsEXT;
245 typedef VkFlags VkVideoEncodeH264CapabilityFlagsEXT;
246 
247 typedef enum VkVideoEncodeH264StdFlagBitsEXT {
248     VK_VIDEO_ENCODE_H264_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_EXT = 0x00000001,
249     VK_VIDEO_ENCODE_H264_STD_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG_SET_BIT_EXT = 0x00000002,
250     VK_VIDEO_ENCODE_H264_STD_SCALING_MATRIX_PRESENT_FLAG_SET_BIT_EXT = 0x00000004,
251     VK_VIDEO_ENCODE_H264_STD_CHROMA_QP_INDEX_OFFSET_BIT_EXT = 0x00000008,
252     VK_VIDEO_ENCODE_H264_STD_SECOND_CHROMA_QP_INDEX_OFFSET_BIT_EXT = 0x00000010,
253     VK_VIDEO_ENCODE_H264_STD_PIC_INIT_QP_MINUS26_BIT_EXT = 0x00000020,
254     VK_VIDEO_ENCODE_H264_STD_WEIGHTED_PRED_FLAG_SET_BIT_EXT = 0x00000040,
255     VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_EXPLICIT_BIT_EXT = 0x00000080,
256     VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_IMPLICIT_BIT_EXT = 0x00000100,
257     VK_VIDEO_ENCODE_H264_STD_TRANSFORM_8X8_MODE_FLAG_SET_BIT_EXT = 0x00000200,
258     VK_VIDEO_ENCODE_H264_STD_DIRECT_SPATIAL_MV_PRED_FLAG_UNSET_BIT_EXT = 0x00000400,
259     VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_EXT = 0x00000800,
260     VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_EXT = 0x00001000,
261     VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_EXT = 0x00002000,
262     VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_EXT = 0x00004000,
263     VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00008000,
264     VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00010000,
265     VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00020000,
266     VK_VIDEO_ENCODE_H264_STD_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
267 } VkVideoEncodeH264StdFlagBitsEXT;
268 typedef VkFlags VkVideoEncodeH264StdFlagsEXT;
269 
270 typedef enum VkVideoEncodeH264RateControlFlagBitsEXT {
271     VK_VIDEO_ENCODE_H264_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_EXT = 0x00000001,
272     VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_EXT = 0x00000002,
273     VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_EXT = 0x00000004,
274     VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_EXT = 0x00000008,
275     VK_VIDEO_ENCODE_H264_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_EXT = 0x00000010,
276     VK_VIDEO_ENCODE_H264_RATE_CONTROL_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
277 } VkVideoEncodeH264RateControlFlagBitsEXT;
278 typedef VkFlags VkVideoEncodeH264RateControlFlagsEXT;
279 typedef struct VkVideoEncodeH264CapabilitiesEXT {
280     VkStructureType                        sType;
281     void*                                  pNext;
282     VkVideoEncodeH264CapabilityFlagsEXT    flags;
283     StdVideoH264LevelIdc                   maxLevelIdc;
284     uint32_t                               maxSliceCount;
285     uint32_t                               maxPPictureL0ReferenceCount;
286     uint32_t                               maxBPictureL0ReferenceCount;
287     uint32_t                               maxL1ReferenceCount;
288     uint32_t                               maxTemporalLayerCount;
289     VkBool32                               expectDyadicTemporalLayerPattern;
290     int32_t                                minQp;
291     int32_t                                maxQp;
292     VkBool32                               prefersGopRemainingFrames;
293     VkBool32                               requiresGopRemainingFrames;
294     VkVideoEncodeH264StdFlagsEXT           stdSyntaxFlags;
295 } VkVideoEncodeH264CapabilitiesEXT;
296 
297 typedef struct VkVideoEncodeH264QpEXT {
298     int32_t    qpI;
299     int32_t    qpP;
300     int32_t    qpB;
301 } VkVideoEncodeH264QpEXT;
302 
303 typedef struct VkVideoEncodeH264QualityLevelPropertiesEXT {
304     VkStructureType                         sType;
305     void*                                   pNext;
306     VkVideoEncodeH264RateControlFlagsEXT    preferredRateControlFlags;
307     uint32_t                                preferredGopFrameCount;
308     uint32_t                                preferredIdrPeriod;
309     uint32_t                                preferredConsecutiveBFrameCount;
310     uint32_t                                preferredTemporalLayerCount;
311     VkVideoEncodeH264QpEXT                  preferredConstantQp;
312     uint32_t                                preferredMaxL0ReferenceCount;
313     uint32_t                                preferredMaxL1ReferenceCount;
314     VkBool32                                preferredStdEntropyCodingModeFlag;
315 } VkVideoEncodeH264QualityLevelPropertiesEXT;
316 
317 typedef struct VkVideoEncodeH264SessionCreateInfoEXT {
318     VkStructureType         sType;
319     const void*             pNext;
320     VkBool32                useMaxLevelIdc;
321     StdVideoH264LevelIdc    maxLevelIdc;
322 } VkVideoEncodeH264SessionCreateInfoEXT;
323 
324 typedef struct VkVideoEncodeH264SessionParametersAddInfoEXT {
325     VkStructureType                            sType;
326     const void*                                pNext;
327     uint32_t                                   stdSPSCount;
328     const StdVideoH264SequenceParameterSet*    pStdSPSs;
329     uint32_t                                   stdPPSCount;
330     const StdVideoH264PictureParameterSet*     pStdPPSs;
331 } VkVideoEncodeH264SessionParametersAddInfoEXT;
332 
333 typedef struct VkVideoEncodeH264SessionParametersCreateInfoEXT {
334     VkStructureType                                        sType;
335     const void*                                            pNext;
336     uint32_t                                               maxStdSPSCount;
337     uint32_t                                               maxStdPPSCount;
338     const VkVideoEncodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
339 } VkVideoEncodeH264SessionParametersCreateInfoEXT;
340 
341 typedef struct VkVideoEncodeH264SessionParametersGetInfoEXT {
342     VkStructureType    sType;
343     const void*        pNext;
344     VkBool32           writeStdSPS;
345     VkBool32           writeStdPPS;
346     uint32_t           stdSPSId;
347     uint32_t           stdPPSId;
348 } VkVideoEncodeH264SessionParametersGetInfoEXT;
349 
350 typedef struct VkVideoEncodeH264SessionParametersFeedbackInfoEXT {
351     VkStructureType    sType;
352     void*              pNext;
353     VkBool32           hasStdSPSOverrides;
354     VkBool32           hasStdPPSOverrides;
355 } VkVideoEncodeH264SessionParametersFeedbackInfoEXT;
356 
357 typedef struct VkVideoEncodeH264NaluSliceInfoEXT {
358     VkStructureType                         sType;
359     const void*                             pNext;
360     int32_t                                 constantQp;
361     const StdVideoEncodeH264SliceHeader*    pStdSliceHeader;
362 } VkVideoEncodeH264NaluSliceInfoEXT;
363 
364 typedef struct VkVideoEncodeH264PictureInfoEXT {
365     VkStructureType                             sType;
366     const void*                                 pNext;
367     uint32_t                                    naluSliceEntryCount;
368     const VkVideoEncodeH264NaluSliceInfoEXT*    pNaluSliceEntries;
369     const StdVideoEncodeH264PictureInfo*        pStdPictureInfo;
370     VkBool32                                    generatePrefixNalu;
371 } VkVideoEncodeH264PictureInfoEXT;
372 
373 typedef struct VkVideoEncodeH264DpbSlotInfoEXT {
374     VkStructureType                           sType;
375     const void*                               pNext;
376     const StdVideoEncodeH264ReferenceInfo*    pStdReferenceInfo;
377 } VkVideoEncodeH264DpbSlotInfoEXT;
378 
379 typedef struct VkVideoEncodeH264ProfileInfoEXT {
380     VkStructureType           sType;
381     const void*               pNext;
382     StdVideoH264ProfileIdc    stdProfileIdc;
383 } VkVideoEncodeH264ProfileInfoEXT;
384 
385 typedef struct VkVideoEncodeH264RateControlInfoEXT {
386     VkStructureType                         sType;
387     const void*                             pNext;
388     VkVideoEncodeH264RateControlFlagsEXT    flags;
389     uint32_t                                gopFrameCount;
390     uint32_t                                idrPeriod;
391     uint32_t                                consecutiveBFrameCount;
392     uint32_t                                temporalLayerCount;
393 } VkVideoEncodeH264RateControlInfoEXT;
394 
395 typedef struct VkVideoEncodeH264FrameSizeEXT {
396     uint32_t    frameISize;
397     uint32_t    framePSize;
398     uint32_t    frameBSize;
399 } VkVideoEncodeH264FrameSizeEXT;
400 
401 typedef struct VkVideoEncodeH264RateControlLayerInfoEXT {
402     VkStructureType                  sType;
403     const void*                      pNext;
404     VkBool32                         useMinQp;
405     VkVideoEncodeH264QpEXT           minQp;
406     VkBool32                         useMaxQp;
407     VkVideoEncodeH264QpEXT           maxQp;
408     VkBool32                         useMaxFrameSize;
409     VkVideoEncodeH264FrameSizeEXT    maxFrameSize;
410 } VkVideoEncodeH264RateControlLayerInfoEXT;
411 
412 typedef struct VkVideoEncodeH264GopRemainingFrameInfoEXT {
413     VkStructureType    sType;
414     const void*        pNext;
415     VkBool32           useGopRemainingFrames;
416     uint32_t           gopRemainingI;
417     uint32_t           gopRemainingP;
418     uint32_t           gopRemainingB;
419 } VkVideoEncodeH264GopRemainingFrameInfoEXT;
420 
421 
422 
423 // VK_EXT_video_encode_h265 is a preprocessor guard. Do not pass it to API calls.
424 #define VK_EXT_video_encode_h265 1
425 #include "vk_video/vulkan_video_codec_h265std.h"
426 #include "vk_video/vulkan_video_codec_h265std_encode.h"
427 #define VK_EXT_VIDEO_ENCODE_H265_SPEC_VERSION 11
428 #define VK_EXT_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_EXT_video_encode_h265"
429 
430 typedef enum VkVideoEncodeH265CapabilityFlagBitsEXT {
431     VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT = 0x00000001,
432     VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_EXT = 0x00000002,
433     VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT = 0x00000004,
434     VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_EXT = 0x00000008,
435     VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT = 0x00000010,
436     VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT = 0x00000020,
437     VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_EXT = 0x00000040,
438     VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_EXT = 0x00000080,
439     VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_EXT = 0x00000100,
440     VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_EXT = 0x00000200,
441     VK_VIDEO_ENCODE_H265_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
442 } VkVideoEncodeH265CapabilityFlagBitsEXT;
443 typedef VkFlags VkVideoEncodeH265CapabilityFlagsEXT;
444 
445 typedef enum VkVideoEncodeH265StdFlagBitsEXT {
446     VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_EXT = 0x00000001,
447     VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_EXT = 0x00000002,
448     VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_EXT = 0x00000004,
449     VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_EXT = 0x00000008,
450     VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_EXT = 0x00000010,
451     VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_EXT = 0x00000020,
452     VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_EXT = 0x00000040,
453     VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_EXT = 0x00000080,
454     VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT = 0x00000100,
455     VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_EXT = 0x00000200,
456     VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_EXT = 0x00000400,
457     VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_EXT = 0x00000800,
458     VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_EXT = 0x00001000,
459     VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_EXT = 0x00002000,
460     VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_EXT = 0x00004000,
461     VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_EXT = 0x00008000,
462     VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_EXT = 0x00010000,
463     VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_EXT = 0x00020000,
464     VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_EXT = 0x00040000,
465     VK_VIDEO_ENCODE_H265_STD_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
466 } VkVideoEncodeH265StdFlagBitsEXT;
467 typedef VkFlags VkVideoEncodeH265StdFlagsEXT;
468 
469 typedef enum VkVideoEncodeH265CtbSizeFlagBitsEXT {
470     VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT = 0x00000001,
471     VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT = 0x00000002,
472     VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT = 0x00000004,
473     VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
474 } VkVideoEncodeH265CtbSizeFlagBitsEXT;
475 typedef VkFlags VkVideoEncodeH265CtbSizeFlagsEXT;
476 
477 typedef enum VkVideoEncodeH265TransformBlockSizeFlagBitsEXT {
478     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT = 0x00000001,
479     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT = 0x00000002,
480     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT = 0x00000004,
481     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT = 0x00000008,
482     VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
483 } VkVideoEncodeH265TransformBlockSizeFlagBitsEXT;
484 typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsEXT;
485 
486 typedef enum VkVideoEncodeH265RateControlFlagBitsEXT {
487     VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_EXT = 0x00000001,
488     VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_EXT = 0x00000002,
489     VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_EXT = 0x00000004,
490     VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_EXT = 0x00000008,
491     VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_EXT = 0x00000010,
492     VK_VIDEO_ENCODE_H265_RATE_CONTROL_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
493 } VkVideoEncodeH265RateControlFlagBitsEXT;
494 typedef VkFlags VkVideoEncodeH265RateControlFlagsEXT;
495 typedef struct VkVideoEncodeH265CapabilitiesEXT {
496     VkStructureType                                sType;
497     void*                                          pNext;
498     VkVideoEncodeH265CapabilityFlagsEXT            flags;
499     StdVideoH265LevelIdc                           maxLevelIdc;
500     uint32_t                                       maxSliceSegmentCount;
501     VkExtent2D                                     maxTiles;
502     VkVideoEncodeH265CtbSizeFlagsEXT               ctbSizes;
503     VkVideoEncodeH265TransformBlockSizeFlagsEXT    transformBlockSizes;
504     uint32_t                                       maxPPictureL0ReferenceCount;
505     uint32_t                                       maxBPictureL0ReferenceCount;
506     uint32_t                                       maxL1ReferenceCount;
507     uint32_t                                       maxSubLayerCount;
508     VkBool32                                       expectDyadicTemporalSubLayerPattern;
509     int32_t                                        minQp;
510     int32_t                                        maxQp;
511     VkBool32                                       prefersGopRemainingFrames;
512     VkBool32                                       requiresGopRemainingFrames;
513     VkVideoEncodeH265StdFlagsEXT                   stdSyntaxFlags;
514 } VkVideoEncodeH265CapabilitiesEXT;
515 
516 typedef struct VkVideoEncodeH265SessionCreateInfoEXT {
517     VkStructureType         sType;
518     const void*             pNext;
519     VkBool32                useMaxLevelIdc;
520     StdVideoH265LevelIdc    maxLevelIdc;
521 } VkVideoEncodeH265SessionCreateInfoEXT;
522 
523 typedef struct VkVideoEncodeH265QpEXT {
524     int32_t    qpI;
525     int32_t    qpP;
526     int32_t    qpB;
527 } VkVideoEncodeH265QpEXT;
528 
529 typedef struct VkVideoEncodeH265QualityLevelPropertiesEXT {
530     VkStructureType                         sType;
531     void*                                   pNext;
532     VkVideoEncodeH265RateControlFlagsEXT    preferredRateControlFlags;
533     uint32_t                                preferredGopFrameCount;
534     uint32_t                                preferredIdrPeriod;
535     uint32_t                                preferredConsecutiveBFrameCount;
536     uint32_t                                preferredSubLayerCount;
537     VkVideoEncodeH265QpEXT                  preferredConstantQp;
538     uint32_t                                preferredMaxL0ReferenceCount;
539     uint32_t                                preferredMaxL1ReferenceCount;
540 } VkVideoEncodeH265QualityLevelPropertiesEXT;
541 
542 typedef struct VkVideoEncodeH265SessionParametersAddInfoEXT {
543     VkStructureType                            sType;
544     const void*                                pNext;
545     uint32_t                                   stdVPSCount;
546     const StdVideoH265VideoParameterSet*       pStdVPSs;
547     uint32_t                                   stdSPSCount;
548     const StdVideoH265SequenceParameterSet*    pStdSPSs;
549     uint32_t                                   stdPPSCount;
550     const StdVideoH265PictureParameterSet*     pStdPPSs;
551 } VkVideoEncodeH265SessionParametersAddInfoEXT;
552 
553 typedef struct VkVideoEncodeH265SessionParametersCreateInfoEXT {
554     VkStructureType                                        sType;
555     const void*                                            pNext;
556     uint32_t                                               maxStdVPSCount;
557     uint32_t                                               maxStdSPSCount;
558     uint32_t                                               maxStdPPSCount;
559     const VkVideoEncodeH265SessionParametersAddInfoEXT*    pParametersAddInfo;
560 } VkVideoEncodeH265SessionParametersCreateInfoEXT;
561 
562 typedef struct VkVideoEncodeH265SessionParametersGetInfoEXT {
563     VkStructureType    sType;
564     const void*        pNext;
565     VkBool32           writeStdVPS;
566     VkBool32           writeStdSPS;
567     VkBool32           writeStdPPS;
568     uint32_t           stdVPSId;
569     uint32_t           stdSPSId;
570     uint32_t           stdPPSId;
571 } VkVideoEncodeH265SessionParametersGetInfoEXT;
572 
573 typedef struct VkVideoEncodeH265SessionParametersFeedbackInfoEXT {
574     VkStructureType    sType;
575     void*              pNext;
576     VkBool32           hasStdVPSOverrides;
577     VkBool32           hasStdSPSOverrides;
578     VkBool32           hasStdPPSOverrides;
579 } VkVideoEncodeH265SessionParametersFeedbackInfoEXT;
580 
581 typedef struct VkVideoEncodeH265NaluSliceSegmentInfoEXT {
582     VkStructureType                                sType;
583     const void*                                    pNext;
584     int32_t                                        constantQp;
585     const StdVideoEncodeH265SliceSegmentHeader*    pStdSliceSegmentHeader;
586 } VkVideoEncodeH265NaluSliceSegmentInfoEXT;
587 
588 typedef struct VkVideoEncodeH265PictureInfoEXT {
589     VkStructureType                                    sType;
590     const void*                                        pNext;
591     uint32_t                                           naluSliceSegmentEntryCount;
592     const VkVideoEncodeH265NaluSliceSegmentInfoEXT*    pNaluSliceSegmentEntries;
593     const StdVideoEncodeH265PictureInfo*               pStdPictureInfo;
594 } VkVideoEncodeH265PictureInfoEXT;
595 
596 typedef struct VkVideoEncodeH265DpbSlotInfoEXT {
597     VkStructureType                           sType;
598     const void*                               pNext;
599     const StdVideoEncodeH265ReferenceInfo*    pStdReferenceInfo;
600 } VkVideoEncodeH265DpbSlotInfoEXT;
601 
602 typedef struct VkVideoEncodeH265ProfileInfoEXT {
603     VkStructureType           sType;
604     const void*               pNext;
605     StdVideoH265ProfileIdc    stdProfileIdc;
606 } VkVideoEncodeH265ProfileInfoEXT;
607 
608 typedef struct VkVideoEncodeH265RateControlInfoEXT {
609     VkStructureType                         sType;
610     const void*                             pNext;
611     VkVideoEncodeH265RateControlFlagsEXT    flags;
612     uint32_t                                gopFrameCount;
613     uint32_t                                idrPeriod;
614     uint32_t                                consecutiveBFrameCount;
615     uint32_t                                subLayerCount;
616 } VkVideoEncodeH265RateControlInfoEXT;
617 
618 typedef struct VkVideoEncodeH265FrameSizeEXT {
619     uint32_t    frameISize;
620     uint32_t    framePSize;
621     uint32_t    frameBSize;
622 } VkVideoEncodeH265FrameSizeEXT;
623 
624 typedef struct VkVideoEncodeH265RateControlLayerInfoEXT {
625     VkStructureType                  sType;
626     const void*                      pNext;
627     VkBool32                         useMinQp;
628     VkVideoEncodeH265QpEXT           minQp;
629     VkBool32                         useMaxQp;
630     VkVideoEncodeH265QpEXT           maxQp;
631     VkBool32                         useMaxFrameSize;
632     VkVideoEncodeH265FrameSizeEXT    maxFrameSize;
633 } VkVideoEncodeH265RateControlLayerInfoEXT;
634 
635 typedef struct VkVideoEncodeH265GopRemainingFrameInfoEXT {
636     VkStructureType    sType;
637     const void*        pNext;
638     VkBool32           useGopRemainingFrames;
639     uint32_t           gopRemainingI;
640     uint32_t           gopRemainingP;
641     uint32_t           gopRemainingB;
642 } VkVideoEncodeH265GopRemainingFrameInfoEXT;
643 
644 
645 
646 // VK_AMDX_shader_enqueue is a preprocessor guard. Do not pass it to API calls.
647 #define VK_AMDX_shader_enqueue 1
648 #define VK_AMDX_SHADER_ENQUEUE_SPEC_VERSION 1
649 #define VK_AMDX_SHADER_ENQUEUE_EXTENSION_NAME "VK_AMDX_shader_enqueue"
650 #define VK_SHADER_INDEX_UNUSED_AMDX       (~0U)
651 typedef struct VkPhysicalDeviceShaderEnqueueFeaturesAMDX {
652     VkStructureType    sType;
653     void*              pNext;
654     VkBool32           shaderEnqueue;
655 } VkPhysicalDeviceShaderEnqueueFeaturesAMDX;
656 
657 typedef struct VkPhysicalDeviceShaderEnqueuePropertiesAMDX {
658     VkStructureType    sType;
659     void*              pNext;
660     uint32_t           maxExecutionGraphDepth;
661     uint32_t           maxExecutionGraphShaderOutputNodes;
662     uint32_t           maxExecutionGraphShaderPayloadSize;
663     uint32_t           maxExecutionGraphShaderPayloadCount;
664     uint32_t           executionGraphDispatchAddressAlignment;
665 } VkPhysicalDeviceShaderEnqueuePropertiesAMDX;
666 
667 typedef struct VkExecutionGraphPipelineScratchSizeAMDX {
668     VkStructureType    sType;
669     void*              pNext;
670     VkDeviceSize       size;
671 } VkExecutionGraphPipelineScratchSizeAMDX;
672 
673 typedef struct VkExecutionGraphPipelineCreateInfoAMDX {
674     VkStructureType                           sType;
675     const void*                               pNext;
676     VkPipelineCreateFlags                     flags;
677     uint32_t                                  stageCount;
678     const VkPipelineShaderStageCreateInfo*    pStages;
679     const VkPipelineLibraryCreateInfoKHR*     pLibraryInfo;
680     VkPipelineLayout                          layout;
681     VkPipeline                                basePipelineHandle;
682     int32_t                                   basePipelineIndex;
683 } VkExecutionGraphPipelineCreateInfoAMDX;
684 
685 typedef union VkDeviceOrHostAddressConstAMDX {
686     VkDeviceAddress    deviceAddress;
687     const void*        hostAddress;
688 } VkDeviceOrHostAddressConstAMDX;
689 
690 typedef struct VkDispatchGraphInfoAMDX {
691     uint32_t                          nodeIndex;
692     uint32_t                          payloadCount;
693     VkDeviceOrHostAddressConstAMDX    payloads;
694     uint64_t                          payloadStride;
695 } VkDispatchGraphInfoAMDX;
696 
697 typedef struct VkDispatchGraphCountInfoAMDX {
698     uint32_t                          count;
699     VkDeviceOrHostAddressConstAMDX    infos;
700     uint64_t                          stride;
701 } VkDispatchGraphCountInfoAMDX;
702 
703 typedef struct VkPipelineShaderStageNodeCreateInfoAMDX {
704       VkStructureType    sType;
705     const void*          pNext;
706     const char*          pName;
707     uint32_t             index;
708 } VkPipelineShaderStageNodeCreateInfoAMDX;
709 
710 typedef VkResult (VKAPI_PTR *PFN_vkCreateExecutionGraphPipelinesAMDX)(VkDevice                                        device, VkPipelineCache                 pipelineCache, uint32_t                                        createInfoCount, const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos, const VkAllocationCallbacks*    pAllocator, VkPipeline*               pPipelines);
711 typedef VkResult (VKAPI_PTR *PFN_vkGetExecutionGraphPipelineScratchSizeAMDX)(VkDevice                                        device, VkPipeline                                      executionGraph, VkExecutionGraphPipelineScratchSizeAMDX*         pSizeInfo);
712 typedef VkResult (VKAPI_PTR *PFN_vkGetExecutionGraphPipelineNodeIndexAMDX)(VkDevice                                        device, VkPipeline                                      executionGraph, const VkPipelineShaderStageNodeCreateInfoAMDX*   pNodeInfo, uint32_t*                                       pNodeIndex);
713 typedef void (VKAPI_PTR *PFN_vkCmdInitializeGraphScratchMemoryAMDX)(VkCommandBuffer                                 commandBuffer, VkDeviceAddress                                 scratch);
714 typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphAMDX)(VkCommandBuffer                                 commandBuffer, VkDeviceAddress                                 scratch, const VkDispatchGraphCountInfoAMDX*              pCountInfo);
715 typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphIndirectAMDX)(VkCommandBuffer                                 commandBuffer, VkDeviceAddress                                 scratch, const VkDispatchGraphCountInfoAMDX*              pCountInfo);
716 typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphIndirectCountAMDX)(VkCommandBuffer                                 commandBuffer, VkDeviceAddress                                 scratch, VkDeviceAddress                                 countInfo);
717 
718 #ifndef VK_NO_PROTOTYPES
719 VKAPI_ATTR VkResult VKAPI_CALL vkCreateExecutionGraphPipelinesAMDX(
720     VkDevice                                    device,
721     VkPipelineCache                             pipelineCache,
722     uint32_t                                    createInfoCount,
723     const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos,
724     const VkAllocationCallbacks*                pAllocator,
725     VkPipeline*                                 pPipelines);
726 
727 VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineScratchSizeAMDX(
728     VkDevice                                    device,
729     VkPipeline                                  executionGraph,
730     VkExecutionGraphPipelineScratchSizeAMDX*    pSizeInfo);
731 
732 VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineNodeIndexAMDX(
733     VkDevice                                    device,
734     VkPipeline                                  executionGraph,
735     const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo,
736     uint32_t*                                   pNodeIndex);
737 
738 VKAPI_ATTR void VKAPI_CALL vkCmdInitializeGraphScratchMemoryAMDX(
739     VkCommandBuffer                             commandBuffer,
740     VkDeviceAddress                             scratch);
741 
742 VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphAMDX(
743     VkCommandBuffer                             commandBuffer,
744     VkDeviceAddress                             scratch,
745     const VkDispatchGraphCountInfoAMDX*         pCountInfo);
746 
747 VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectAMDX(
748     VkCommandBuffer                             commandBuffer,
749     VkDeviceAddress                             scratch,
750     const VkDispatchGraphCountInfoAMDX*         pCountInfo);
751 
752 VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectCountAMDX(
753     VkCommandBuffer                             commandBuffer,
754     VkDeviceAddress                             scratch,
755     VkDeviceAddress                             countInfo);
756 #endif
757 
758 
759 // VK_NV_displacement_micromap is a preprocessor guard. Do not pass it to API calls.
760 #define VK_NV_displacement_micromap 1
761 #define VK_NV_DISPLACEMENT_MICROMAP_SPEC_VERSION 2
762 #define VK_NV_DISPLACEMENT_MICROMAP_EXTENSION_NAME "VK_NV_displacement_micromap"
763 
764 typedef enum VkDisplacementMicromapFormatNV {
765     VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV = 1,
766     VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV = 2,
767     VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV = 3,
768     VK_DISPLACEMENT_MICROMAP_FORMAT_MAX_ENUM_NV = 0x7FFFFFFF
769 } VkDisplacementMicromapFormatNV;
770 typedef struct VkPhysicalDeviceDisplacementMicromapFeaturesNV {
771     VkStructureType    sType;
772     void*              pNext;
773     VkBool32           displacementMicromap;
774 } VkPhysicalDeviceDisplacementMicromapFeaturesNV;
775 
776 typedef struct VkPhysicalDeviceDisplacementMicromapPropertiesNV {
777     VkStructureType    sType;
778     void*              pNext;
779     uint32_t           maxDisplacementMicromapSubdivisionLevel;
780 } VkPhysicalDeviceDisplacementMicromapPropertiesNV;
781 
782 typedef struct VkAccelerationStructureTrianglesDisplacementMicromapNV {
783     VkStructureType                     sType;
784     void*                               pNext;
785     VkFormat                            displacementBiasAndScaleFormat;
786     VkFormat                            displacementVectorFormat;
787     VkDeviceOrHostAddressConstKHR       displacementBiasAndScaleBuffer;
788     VkDeviceSize                        displacementBiasAndScaleStride;
789     VkDeviceOrHostAddressConstKHR       displacementVectorBuffer;
790     VkDeviceSize                        displacementVectorStride;
791     VkDeviceOrHostAddressConstKHR       displacedMicromapPrimitiveFlags;
792     VkDeviceSize                        displacedMicromapPrimitiveFlagsStride;
793     VkIndexType                         indexType;
794     VkDeviceOrHostAddressConstKHR       indexBuffer;
795     VkDeviceSize                        indexStride;
796     uint32_t                            baseTriangle;
797     uint32_t                            usageCountsCount;
798     const VkMicromapUsageEXT*           pUsageCounts;
799     const VkMicromapUsageEXT* const*    ppUsageCounts;
800     VkMicromapEXT                       micromap;
801 } VkAccelerationStructureTrianglesDisplacementMicromapNV;
802 
803 
804 #ifdef __cplusplus
805 }
806 #endif
807 
808 #endif
809