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