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