vulkan_beta.h 40 KB

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