1// Copyright 2015-2024 The Khronos Group Inc. 2// 3// SPDX-License-Identifier: CC-BY-4.0 4 5[[capabilities]] 6= Additional Capabilities 7 8This chapter describes additional capabilities beyond the minimum 9capabilities described in the <<limits, Limits>> and <<formats, Formats>> 10chapters, including: 11 12 * <<capabilities-image, Additional Image Capabilities>> 13ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 14 * <<capabilities-buffer, Additional Buffer Capabilities>> 15endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 16ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[] 17 * <<capabilities-semaphore, Optional Semaphore Capabilities>> 18endif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[] 19ifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[] 20 * <<capabilities-fence, Optional Fence Capabilities>> 21endif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[] 22ifdef::VK_KHR_calibrated_timestamps,VK_EXT_calibrated_timestamps[] 23 * <<features-timestamp-calibration, Timestamp Calibration Capabilities>> 24endif::VK_KHR_calibrated_timestamps,VK_EXT_calibrated_timestamps[] 25 26 27[[capabilities-image]] 28== Additional Image Capabilities 29 30Additional image capabilities, such as larger dimensions or additional 31sample counts for certain image types, or additional capabilities for 32_linear_ tiling format images, are described in this section. 33 34[open,refpage='vkGetPhysicalDeviceImageFormatProperties',desc='Lists physical device\'s image format capabilities',type='protos'] 35-- 36:refpage: vkGetPhysicalDeviceImageFormatProperties 37 38To query additional capabilities specific to image types, call: 39 40include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties.adoc[] 41 42 * pname:physicalDevice is the physical device from which to query the 43 image capabilities. 44 * pname:format is a elink:VkFormat value specifying the image format, 45 corresponding to slink:VkImageCreateInfo::pname:format. 46 * pname:type is a elink:VkImageType value specifying the image type, 47 corresponding to slink:VkImageCreateInfo::pname:imageType. 48 * pname:tiling is a elink:VkImageTiling value specifying the image tiling, 49 corresponding to slink:VkImageCreateInfo::pname:tiling. 50 * pname:usage is a bitmask of elink:VkImageUsageFlagBits specifying the 51 intended usage of the image, corresponding to 52 slink:VkImageCreateInfo::pname:usage. 53 * pname:flags is a bitmask of elink:VkImageCreateFlagBits specifying 54 additional parameters of the image, corresponding to 55 slink:VkImageCreateInfo::pname:flags. 56 * pname:pImageFormatProperties is a pointer to a 57 slink:VkImageFormatProperties structure in which capabilities are 58 returned. 59 60The pname:format, pname:type, pname:tiling, pname:usage, and pname:flags 61parameters correspond to parameters that would be consumed by 62flink:vkCreateImage (as members of slink:VkImageCreateInfo). 63 64If pname:format is not a supported image format, or if the combination of 65pname:format, pname:type, pname:tiling, pname:usage, and pname:flags is not 66supported for images, then fname:vkGetPhysicalDeviceImageFormatProperties 67returns ename:VK_ERROR_FORMAT_NOT_SUPPORTED. 68 69The limitations on an image format that are reported by 70fname:vkGetPhysicalDeviceImageFormatProperties have the following property: 71if code:usage1 and code:usage2 of type tlink:VkImageUsageFlags are such that 72the bits set in code:usage1 are a subset of the bits set in code:usage2, and 73code:flags1 and code:flags2 of type tlink:VkImageCreateFlags are such that 74the bits set in code:flags1 are a subset of the bits set in code:flags2, 75then the limitations for code:usage1 and code:flags1 must: be no more strict 76than the limitations for code:usage2 and code:flags2, for all values of 77pname:format, pname:type, and pname:tiling. 78 79ifdef::VK_EXT_host_image_copy[] 80If `apiext:VK_EXT_host_image_copy` is supported, pname:usage includes 81ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:flags does not include either of 82ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT, 83ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or 84ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, then the result of calls to 85fname:vkGetPhysicalDeviceImageFormatProperties with identical parameters 86except for the inclusion of ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT in 87pname:usage must: be identical. 88endif::VK_EXT_host_image_copy[] 89 90include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[] 91 92ifdef::VK_EXT_image_drm_format_modifier[] 93.Valid Usage 94**** 95 * [[VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-02248]] 96 pname:tiling must: not be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT. 97 (Use flink:vkGetPhysicalDeviceImageFormatProperties2 instead) 98**** 99endif::VK_EXT_image_drm_format_modifier[] 100 101include::{generated}/validity/protos/vkGetPhysicalDeviceImageFormatProperties.adoc[] 102-- 103 104[open,refpage='VkImageFormatProperties',desc='Structure specifying an image format properties',type='structs'] 105-- 106The sname:VkImageFormatProperties structure is defined as: 107 108include::{generated}/api/structs/VkImageFormatProperties.adoc[] 109 110 * pname:maxExtent are the maximum image dimensions. 111 See the <<features-extentperimagetype, Allowed Extent Values>> section 112 below for how these values are constrained by pname:type. 113 * pname:maxMipLevels is the maximum number of mipmap levels. 114 pname:maxMipLevels must: be equal to the number of levels in the 115 complete mipmap chain based on the [eq]#pname:maxExtent.width#, 116 [eq]#pname:maxExtent.height#, and [eq]#pname:maxExtent.depth#, except 117 when one of the following conditions is true, in which case it may: 118 instead be `1`: 119 ** fname:vkGetPhysicalDeviceImageFormatProperties::pname:tiling was 120 ename:VK_IMAGE_TILING_LINEAR 121ifdef::VK_EXT_image_drm_format_modifier[] 122 ** slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling was 123 ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT 124endif::VK_EXT_image_drm_format_modifier[] 125ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 126 ** the slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext chain included 127 a slink:VkPhysicalDeviceExternalImageFormatInfo structure with a handle 128 type included in the pname:handleTypes member for which mipmap image 129 support is not required 130endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 131ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] 132 ** image pname:format is one of the 133 <<formats-requiring-sampler-ycbcr-conversion, formats that require a 134 sampler {YCbCr} conversion>> 135endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] 136ifdef::VK_EXT_fragment_density_map[] 137 ** pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT 138endif::VK_EXT_fragment_density_map[] 139 * pname:maxArrayLayers is the maximum number of array layers. 140 pname:maxArrayLayers must: be no less than 141 slink:VkPhysicalDeviceLimits::pname:maxImageArrayLayers, except when one 142 of the following conditions is true, in which case it may: instead be 143 `1`: 144 ** pname:tiling is ename:VK_IMAGE_TILING_LINEAR 145 ** pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL and pname:type is 146 ename:VK_IMAGE_TYPE_3D 147ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] 148 ** pname:format is one of the 149 <<formats-requiring-sampler-ycbcr-conversion, formats that require a 150 sampler {YCbCr} conversion>> 151endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] 152ifdef::VK_EXT_image_drm_format_modifier[] 153 * If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then 154 pname:maxArrayLayers must: not be 0. 155endif::VK_EXT_image_drm_format_modifier[] 156 * pname:sampleCounts is a bitmask of elink:VkSampleCountFlagBits 157 specifying all the supported sample counts for this image as described 158 <<features-supported-sample-counts, below>>. 159 * pname:maxResourceSize is an upper bound on the total image size in 160 bytes, inclusive of all image subresources. 161 Implementations may: have an address space limit on total size of a 162 resource, which is advertised by this property. 163 pname:maxResourceSize must: be at least 2^31^. 164 165[NOTE] 166.Note 167==== 168There is no mechanism to query the size of an image before creating it, to 169compare that size against pname:maxResourceSize. 170If an application attempts to create an image that exceeds this limit, the 171creation will fail and flink:vkCreateImage will return 172ename:VK_ERROR_OUT_OF_DEVICE_MEMORY. 173While the advertised limit must: be at least 2^31^, it may: not be possible 174to create an image that approaches that size, particularly for 175ename:VK_IMAGE_TYPE_1D. 176==== 177 178If the combination of parameters to 179fname:vkGetPhysicalDeviceImageFormatProperties is not supported by the 180implementation for use in flink:vkCreateImage, then all members of 181sname:VkImageFormatProperties will be filled with zero. 182 183[NOTE] 184.Note 185==== 186Filling sname:VkImageFormatProperties with zero for unsupported formats is 187an exception to the usual rule that output structures have undefined: 188contents on error. 189This exception was unintentional, but is preserved for backwards 190compatibility. 191==== 192 193include::{generated}/validity/structs/VkImageFormatProperties.adoc[] 194-- 195 196ifdef::VK_NV_external_memory_capabilities[] 197include::{chapters}/VK_NV_external_memory_capabilities/external_image_format.adoc[] 198endif::VK_NV_external_memory_capabilities[] 199 200ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] 201 202[open,refpage='vkGetPhysicalDeviceImageFormatProperties2',desc='Lists physical device\'s image format capabilities',type='protos'] 203-- 204:refpage: vkGetPhysicalDeviceImageFormatProperties2 205 206To query additional capabilities specific to image types, call: 207 208ifdef::VK_VERSION_1_1[] 209include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties2.adoc[] 210endif::VK_VERSION_1_1[] 211 212ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command] 213 214ifdef::VK_KHR_get_physical_device_properties2[] 215include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties2KHR.adoc[] 216endif::VK_KHR_get_physical_device_properties2[] 217 218 * pname:physicalDevice is the physical device from which to query the 219 image capabilities. 220 * pname:pImageFormatInfo is a pointer to a 221 slink:VkPhysicalDeviceImageFormatInfo2 structure describing the 222 parameters that would be consumed by flink:vkCreateImage. 223 * pname:pImageFormatProperties is a pointer to a 224 slink:VkImageFormatProperties2 structure in which capabilities are 225 returned. 226 227fname:vkGetPhysicalDeviceImageFormatProperties2 behaves similarly to 228flink:vkGetPhysicalDeviceImageFormatProperties, with the ability to return 229extended information in a pname:pNext chain of output structures. 230 231ifdef::VK_KHR_video_queue[] 232If the pname:pNext chain of pname:pImageFormatInfo includes a 233slink:VkVideoProfileListInfoKHR structure with a pname:profileCount member 234greater than `0`, then this command returns format capabilities specific to 235image types used in conjunction with the specified <<video-profiles,video 236profiles>>. 237In this case, this command will return one of the 238<<video-profile-error-codes, video-profile-specific error codes>> if any of 239the profiles specified via slink:VkVideoProfileListInfoKHR::pname:pProfiles 240are not supported. 241Furthermore, if slink:VkPhysicalDeviceImageFormatInfo2::pname:usage includes 242any image usage flag not supported by the specified video profiles, then 243this command returns ename:VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR. 244endif::VK_KHR_video_queue[] 245 246include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[] 247 248ifdef::VK_ANDROID_external_memory_android_hardware_buffer,VK_EXT_host_image_copy[] 249.Valid Usage 250**** 251ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] 252 * [[VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-01868]] 253 If the pname:pNext chain of pname:pImageFormatProperties includes a 254 slink:VkAndroidHardwareBufferUsageANDROID structure, the pname:pNext 255 chain of pname:pImageFormatInfo must: include a 256 slink:VkPhysicalDeviceExternalImageFormatInfo structure with 257 pname:handleType set to 258 ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID 259endif::VK_ANDROID_external_memory_android_hardware_buffer[] 260ifdef::VK_EXT_host_image_copy[] 261 * [[VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-09004]] 262 If the pname:pNext chain of pname:pImageFormatProperties includes a 263 slink:VkHostImageCopyDevicePerformanceQueryEXT structure, 264 pname:pImageFormatInfo->usage must: contain 265 ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT 266endif::VK_EXT_host_image_copy[] 267**** 268endif::VK_ANDROID_external_memory_android_hardware_buffer,VK_EXT_host_image_copy[] 269 270include::{generated}/validity/protos/vkGetPhysicalDeviceImageFormatProperties2.adoc[] 271-- 272 273[open,refpage='VkPhysicalDeviceImageFormatInfo2',desc='Structure specifying image creation parameters',type='structs'] 274-- 275The sname:VkPhysicalDeviceImageFormatInfo2 structure is defined as: 276 277include::{generated}/api/structs/VkPhysicalDeviceImageFormatInfo2.adoc[] 278 279ifdef::VK_KHR_get_physical_device_properties2[] 280or the equivalent 281 282include::{generated}/api/structs/VkPhysicalDeviceImageFormatInfo2KHR.adoc[] 283endif::VK_KHR_get_physical_device_properties2[] 284 285 * pname:sType is a elink:VkStructureType value identifying this structure. 286 * pname:pNext is `NULL` or a pointer to a structure extending this 287 structure. 288 The pname:pNext chain of sname:VkPhysicalDeviceImageFormatInfo2 is used 289 to provide additional image parameters to 290 fname:vkGetPhysicalDeviceImageFormatProperties2. 291 * pname:format is a elink:VkFormat value indicating the image format, 292 corresponding to slink:VkImageCreateInfo::pname:format. 293 * pname:type is a elink:VkImageType value indicating the image type, 294 corresponding to slink:VkImageCreateInfo::pname:imageType. 295 * pname:tiling is a elink:VkImageTiling value indicating the image tiling, 296 corresponding to slink:VkImageCreateInfo::pname:tiling. 297 * pname:usage is a bitmask of elink:VkImageUsageFlagBits indicating the 298 intended usage of the image, corresponding to 299 slink:VkImageCreateInfo::pname:usage. 300 * pname:flags is a bitmask of elink:VkImageCreateFlagBits indicating 301 additional parameters of the image, corresponding to 302 slink:VkImageCreateInfo::pname:flags. 303 304The members of sname:VkPhysicalDeviceImageFormatInfo2 correspond to the 305arguments to flink:vkGetPhysicalDeviceImageFormatProperties, with 306pname:sType and pname:pNext added for extensibility. 307 308ifdef::VK_EXT_image_drm_format_modifier[] 309.Valid Usage 310**** 311 * [[VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02249]] 312 pname:tiling must: be ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT if 313 and only if the pname:pNext chain includes 314 slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT 315 * [[VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02313]] 316 If pname:tiling is ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and 317 pname:flags contains ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, then the 318 pname:pNext chain must: include a slink:VkImageFormatListCreateInfo 319 structure with non-zero pname:viewFormatCount 320**** 321endif::VK_EXT_image_drm_format_modifier[] 322 323include::{generated}/validity/structs/VkPhysicalDeviceImageFormatInfo2.adoc[] 324-- 325 326[open,refpage='VkImageFormatProperties2',desc='Structure specifying an image format properties',type='structs'] 327-- 328The sname:VkImageFormatProperties2 structure is defined as: 329 330include::{generated}/api/structs/VkImageFormatProperties2.adoc[] 331 332ifdef::VK_KHR_get_physical_device_properties2[] 333or the equivalent 334 335include::{generated}/api/structs/VkImageFormatProperties2KHR.adoc[] 336endif::VK_KHR_get_physical_device_properties2[] 337 338 * pname:sType is a elink:VkStructureType value identifying this structure. 339 * pname:pNext is `NULL` or a pointer to a structure extending this 340 structure. 341 The pname:pNext chain of sname:VkImageFormatProperties2 is used to allow 342 the specification of additional capabilities to be returned from 343 fname:vkGetPhysicalDeviceImageFormatProperties2. 344 * pname:imageFormatProperties is a slink:VkImageFormatProperties structure 345 in which capabilities are returned. 346 347If the combination of parameters to 348fname:vkGetPhysicalDeviceImageFormatProperties2 is not supported by the 349implementation for use in flink:vkCreateImage, then all members of 350pname:imageFormatProperties will be filled with zero. 351 352[NOTE] 353.Note 354==== 355Filling pname:imageFormatProperties with zero for unsupported formats is an 356exception to the usual rule that output structures have undefined: contents 357on error. 358This exception was unintentional, but is preserved for backwards 359compatibility. 360This exception only applies to pname:imageFormatProperties, not pname:sType, 361pname:pNext, or any structures chained from pname:pNext. 362==== 363 364include::{generated}/validity/structs/VkImageFormatProperties2.adoc[] 365-- 366 367ifdef::VK_AMD_texture_gather_bias_lod[] 368[open,refpage='VkTextureLODGatherFormatPropertiesAMD',desc='Structure informing whether or not texture gather bias/LOD functionality is supported for a given image format and a given physical device.',type='structs'] 369-- 370To determine if texture gather functions that take explicit LOD and/or bias 371argument values can: be used with a given image format, add a 372slink:VkTextureLODGatherFormatPropertiesAMD structure to the pname:pNext 373chain of the slink:VkImageFormatProperties2 structure in a call to 374fname:vkGetPhysicalDeviceImageFormatProperties2. 375 376The sname:VkTextureLODGatherFormatPropertiesAMD structure is defined as: 377 378include::{generated}/api/structs/VkTextureLODGatherFormatPropertiesAMD.adoc[] 379 380 * pname:sType is a elink:VkStructureType value identifying this structure. 381 * pname:pNext is `NULL` or a pointer to a structure extending this 382 structure. 383 * pname:supportsTextureGatherLODBiasAMD tells if the image format can be 384 used with texture gather bias/LOD functions, as introduced by the 385 `apiext:VK_AMD_texture_gather_bias_lod` extension. 386 This field is set by the implementation. 387 User-specified value is ignored. 388 389include::{generated}/validity/structs/VkTextureLODGatherFormatPropertiesAMD.adoc[] 390-- 391endif::VK_AMD_texture_gather_bias_lod[] 392 393ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 394[open,refpage='VkPhysicalDeviceExternalImageFormatInfo',desc='Structure specifying external image creation parameters',type='structs'] 395-- 396To determine the image capabilities compatible with an external memory 397handle type, add a slink:VkPhysicalDeviceExternalImageFormatInfo structure 398to the pname:pNext chain of the slink:VkPhysicalDeviceImageFormatInfo2 399structure and a sname:VkExternalImageFormatProperties structure to the 400pname:pNext chain of the slink:VkImageFormatProperties2 structure. 401 402The sname:VkPhysicalDeviceExternalImageFormatInfo structure is defined as: 403 404include::{generated}/api/structs/VkPhysicalDeviceExternalImageFormatInfo.adoc[] 405 406ifdef::VK_KHR_external_memory_capabilities[] 407or the equivalent 408 409include::{generated}/api/structs/VkPhysicalDeviceExternalImageFormatInfoKHR.adoc[] 410endif::VK_KHR_external_memory_capabilities[] 411 412 * pname:sType is a elink:VkStructureType value identifying this structure. 413 * pname:pNext is `NULL` or a pointer to a structure extending this 414 structure. 415 * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value 416 specifying the memory handle type that will be used with the memory 417 associated with the image. 418 419If pname:handleType is 0, flink:vkGetPhysicalDeviceImageFormatProperties2 420will behave as if slink:VkPhysicalDeviceExternalImageFormatInfo was not 421present, and slink:VkExternalImageFormatProperties will be ignored. 422 423If pname:handleType is not compatible with the pname:format, pname:type, 424pname:tiling, pname:usage, and pname:flags specified in 425slink:VkPhysicalDeviceImageFormatInfo2, then 426flink:vkGetPhysicalDeviceImageFormatProperties2 returns 427ename:VK_ERROR_FORMAT_NOT_SUPPORTED. 428 429include::{generated}/validity/structs/VkPhysicalDeviceExternalImageFormatInfo.adoc[] 430-- 431 432[open,refpage='VkExternalMemoryHandleTypeFlagBits',desc='Bit specifying external memory handle types',type='enums'] 433-- 434Possible values of 435slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType, specifying 436an external memory handle type, are: 437 438include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBits.adoc[] 439 440ifdef::VK_KHR_external_memory_capabilities[] 441or the equivalent 442 443include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBitsKHR.adoc[] 444endif::VK_KHR_external_memory_capabilities[] 445 446 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX 447 file descriptor handle that has only limited valid usage outside of 448 Vulkan and other compatible APIs. 449 It must: be compatible with the POSIX system calls code:dup, code:dup2, 450 code:close, and the non-standard system call code:dup3. 451 Additionally, it must: be transportable over a socket using an 452 code:SCM_RIGHTS control message. 453 It owns a reference to the underlying memory resource represented by its 454 Vulkan memory object. 455 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT 456 handle that has only limited valid usage outside of Vulkan and other 457 compatible APIs. 458 It must: be compatible with the functions code:DuplicateHandle, 459 code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation, 460 and code:SetHandleInformation. 461 It owns a reference to the underlying memory resource represented by its 462 Vulkan memory object. 463 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a 464 global share handle that has only limited valid usage outside of Vulkan 465 and other compatible APIs. 466 It is not compatible with any native APIs. 467 It does not own a reference to the underlying memory resource 468 represented by its Vulkan memory object, and will therefore become 469 invalid when all Vulkan memory objects associated with it are destroyed. 470 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT specifies an NT 471 handle returned by code:IDXGIResource1::code:CreateSharedHandle 472 referring to a Direct3D 10 or 11 texture resource. 473 It owns a reference to the memory used by the Direct3D resource. 474 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT specifies a 475 global share handle returned by code:IDXGIResource::code:GetSharedHandle 476 referring to a Direct3D 10 or 11 texture resource. 477 It does not own a reference to the underlying Direct3D resource, and 478 will therefore become invalid when all Vulkan memory objects and 479 Direct3D resources associated with it are destroyed. 480 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT specifies an NT 481 handle returned by code:ID3D12Device::code:CreateSharedHandle referring 482 to a Direct3D 12 heap resource. 483 It owns a reference to the resources used by the Direct3D heap. 484 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT specifies an NT 485 handle returned by code:ID3D12Device::code:CreateSharedHandle referring 486 to a Direct3D 12 committed resource. 487 It owns a reference to the memory used by the Direct3D resource. 488ifdef::VK_EXT_external_memory_host[] 489 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT specifies a 490 host pointer returned by a host memory allocation command. 491 It does not own a reference to the underlying memory resource, and will 492 therefore become invalid if the host memory is freed. 493 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT 494 specifies a host pointer to _host mapped foreign memory_. 495 It does not own a reference to the underlying memory resource, and will 496 therefore become invalid if the foreign memory is unmapped or otherwise 497 becomes no longer available. 498endif::VK_EXT_external_memory_host[] 499ifdef::VK_EXT_external_memory_dma_buf[] 500 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT is a file 501 descriptor for a Linux dma_buf. 502 It owns a reference to the underlying memory resource represented by its 503 Vulkan memory object. 504endif::VK_EXT_external_memory_dma_buf[] 505ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] 506 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID 507 specifies an basetype:AHardwareBuffer object defined by the Android NDK. 508 See <<memory-external-android-hardware-buffer,Android Hardware Buffers>> 509 for more details of this handle type. 510endif::VK_ANDROID_external_memory_android_hardware_buffer[] 511ifdef::VK_FUCHSIA_external_memory[] 512 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA is a Zircon 513 handle to a virtual memory object. 514endif::VK_FUCHSIA_external_memory[] 515ifdef::VK_NV_external_memory_rdma[] 516 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV is a handle to 517 an allocation accessible by remote devices. 518 It owns a reference to the underlying memory resource represented by its 519 Vulkan memory object. 520endif::VK_NV_external_memory_rdma[] 521ifdef::VK_NV_external_memory_sci_buf[] 522 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV specifies a volatile 523 memory object (stext:NvSciBufObj) that is backed by a buffer and 524 shareable across various hardware engines including the CPU, and 525 software (intra-process and inter-process) and hardware (system memory) 526 operating domains. 527endif::VK_NV_external_memory_sci_buf[] 528ifdef::VK_QNX_external_memory_screen_buffer[] 529 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX specifies a 530 code:_screen_buffer object defined by the QNX SDP. 531 See <<memory-external-qnx-screen-buffer,QNX Screen Buffer>> for more 532 details of this handle type. 533endif::VK_QNX_external_memory_screen_buffer[] 534 535<<< 536 537Some external memory handle types can only be shared within the same 538underlying physical device and/or the same driver version, as defined in the 539following table: 540 541[[external-memory-handle-types-compatibility]] 542.External memory handle types compatibility 543|==== 544| Handle type | sname:VkPhysicalDeviceIDProperties{wbro}::pname:driverUUID | sname:VkPhysicalDeviceIDProperties{wbro}::pname:deviceUUID 545| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match 546| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match 547| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match 548| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT | Must match | Must match 549| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT | Must match | Must match 550| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT | Must match | Must match 551| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT | Must match | Must match 552ifdef::VK_EXT_external_memory_host[] 553| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT | No restriction | No restriction 554| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT | No restriction | No restriction 555endif::VK_EXT_external_memory_host[] 556ifdef::VK_EXT_external_memory_dma_buf[] 557| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT | No restriction | No restriction 558endif::VK_EXT_external_memory_dma_buf[] 559ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] 560| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID | No restriction | No restriction 561endif::VK_ANDROID_external_memory_android_hardware_buffer[] 562ifdef::VK_FUCHSIA_external_memory[] 563| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA | No restriction | No restriction 564endif::VK_FUCHSIA_external_memory[] 565ifdef::VK_NV_external_memory_rdma[] 566| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV | No restriction | No restriction 567endif::VK_NV_external_memory_rdma[] 568ifdef::VK_NV_external_memory_sci_buf[] 569| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCI_BUF_BIT_NV | No restriction | No restriction 570endif::VK_NV_external_memory_sci_buf[] 571ifdef::VK_QNX_external_memory_screen_buffer[] 572| ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX | No restriction | No restriction 573endif::VK_QNX_external_memory_screen_buffer[] 574|==== 575 576ifdef::VK_EXT_external_memory_host[] 577[NOTE] 578.Note 579==== 580The above table does not restrict the drivers and devices with which 581ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT and 582ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT may: 583be shared, as these handle types inherently mean memory that does not come 584from the same device, as they import memory from the host or a foreign 585device, respectively. 586==== 587endif::VK_EXT_external_memory_host[] 588 589ifdef::VK_EXT_external_memory_dma_buf[] 590[NOTE] 591.Note 592==== 593Even though the above table does not restrict the drivers and devices with 594which ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT may: be shared, 595query mechanisms exist in the Vulkan API that prevent the import of 596incompatible dma-bufs (such as flink:vkGetMemoryFdPropertiesKHR) and that 597prevent incompatible usage of dma-bufs (such as 598slink:VkPhysicalDeviceExternalBufferInfo and 599slink:VkPhysicalDeviceExternalImageFormatInfo). 600==== 601endif::VK_EXT_external_memory_dma_buf[] 602-- 603 604[open,refpage='VkExternalMemoryHandleTypeFlags',desc='Bitmask of VkExternalMemoryHandleTypeFlagBits',type='flags'] 605-- 606include::{generated}/api/flags/VkExternalMemoryHandleTypeFlags.adoc[] 607 608ifdef::VK_KHR_external_memory_capabilities[] 609or the equivalent 610 611include::{generated}/api/flags/VkExternalMemoryHandleTypeFlagsKHR.adoc[] 612endif::VK_KHR_external_memory_capabilities[] 613 614tname:VkExternalMemoryHandleTypeFlags is a bitmask type for setting a mask 615of zero or more elink:VkExternalMemoryHandleTypeFlagBits. 616-- 617 618[open,refpage='VkExternalImageFormatProperties',desc='Structure specifying supported external handle properties',type='structs'] 619-- 620The sname:VkExternalImageFormatProperties structure is defined as: 621 622include::{generated}/api/structs/VkExternalImageFormatProperties.adoc[] 623 624ifdef::VK_KHR_external_memory_capabilities[] 625or the equivalent 626 627include::{generated}/api/structs/VkExternalImageFormatPropertiesKHR.adoc[] 628endif::VK_KHR_external_memory_capabilities[] 629 630 * pname:sType is a elink:VkStructureType value identifying this structure. 631 * pname:pNext is `NULL` or a pointer to a structure extending this 632 structure. 633 * pname:externalMemoryProperties is a slink:VkExternalMemoryProperties 634 structure specifying various capabilities of the external handle type 635 when used with the specified image creation parameters. 636 637include::{generated}/validity/structs/VkExternalImageFormatProperties.adoc[] 638-- 639 640[open,refpage='VkExternalMemoryProperties',desc='Structure specifying external memory handle type capabilities',type='structs'] 641-- 642The sname:VkExternalMemoryProperties structure is defined as: 643 644include::{generated}/api/structs/VkExternalMemoryProperties.adoc[] 645 646ifdef::VK_KHR_external_memory_capabilities[] 647or the equivalent 648 649include::{generated}/api/structs/VkExternalMemoryPropertiesKHR.adoc[] 650endif::VK_KHR_external_memory_capabilities[] 651 652 * pname:externalMemoryFeatures is a bitmask of 653 elink:VkExternalMemoryFeatureFlagBits specifying the features of 654 pname:handleType. 655 * pname:exportFromImportedHandleTypes is a bitmask of 656 elink:VkExternalMemoryHandleTypeFlagBits specifying which types of 657 imported handle pname:handleType can: be exported from. 658 * pname:compatibleHandleTypes is a bitmask of 659 elink:VkExternalMemoryHandleTypeFlagBits specifying handle types which 660 can: be specified at the same time as pname:handleType when creating an 661 image compatible with external memory. 662 663pname:compatibleHandleTypes must: include at least pname:handleType. 664Inclusion of a handle type in pname:compatibleHandleTypes does not imply the 665values returned in slink:VkImageFormatProperties2 will be the same when 666slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType is set to 667that type. 668The application is responsible for querying the capabilities of all handle 669types intended for concurrent use in a single image and intersecting them to 670obtain the compatible set of capabilities. 671 672include::{generated}/validity/structs/VkExternalMemoryProperties.adoc[] 673-- 674 675[open,refpage='VkExternalMemoryFeatureFlagBits',desc='Bitmask specifying features of an external memory handle type',type='enums'] 676-- 677Bits which may: be set in 678slink:VkExternalMemoryProperties::pname:externalMemoryFeatures, specifying 679features of an external memory handle type, are: 680 681include::{generated}/api/enums/VkExternalMemoryFeatureFlagBits.adoc[] 682 683ifdef::VK_KHR_external_memory_capabilities[] 684or the equivalent 685 686include::{generated}/api/enums/VkExternalMemoryFeatureFlagBitsKHR.adoc[] 687endif::VK_KHR_external_memory_capabilities[] 688 689 * ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT specifies that 690 images or buffers created with the specified parameters and handle type 691 must: use the mechanisms defined by slink:VkMemoryDedicatedRequirements 692 and slink:VkMemoryDedicatedAllocateInfo to create (or import) a 693 dedicated allocation for the image or buffer. 694 * ename:VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT specifies that handles 695 of this type can: be exported from Vulkan memory objects. 696 * ename:VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT specifies that handles 697 of this type can: be imported as Vulkan memory objects. 698 699Because their semantics in external APIs roughly align with that of an image 700or buffer with a dedicated allocation in Vulkan, implementations are 701required: to report ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for 702the following external handle types: 703 704 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT 705 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT 706 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT 707ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] 708 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID 709 for images only 710endif::VK_ANDROID_external_memory_android_hardware_buffer[] 711ifdef::VK_QNX_external_memory_screen_buffer[] 712 * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX for images 713 only 714endif::VK_QNX_external_memory_screen_buffer[] 715 716ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] 717Implementations must: not report 718ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for buffers with 719external handle type 720ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID. 721endif::VK_ANDROID_external_memory_android_hardware_buffer[] 722ifdef::VK_QNX_external_memory_screen_buffer[] 723Implementations must: not report 724ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for buffers with 725external handle type 726ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX. 727endif::VK_QNX_external_memory_screen_buffer[] 728ifdef::VK_EXT_external_memory_host[] 729Implementations must: not report 730ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT for images or buffers 731with external handle type 732ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, or 733ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT. 734endif::VK_EXT_external_memory_host[] 735-- 736 737[open,refpage='VkExternalMemoryFeatureFlags',desc='Bitmask of VkExternalMemoryFeatureFlagBits',type='flags'] 738-- 739include::{generated}/api/flags/VkExternalMemoryFeatureFlags.adoc[] 740 741ifdef::VK_KHR_external_memory_capabilities[] 742or the equivalent 743 744include::{generated}/api/flags/VkExternalMemoryFeatureFlagsKHR.adoc[] 745endif::VK_KHR_external_memory_capabilities[] 746 747tname:VkExternalMemoryFeatureFlags is a bitmask type for setting a mask of 748zero or more elink:VkExternalMemoryFeatureFlagBits. 749-- 750 751endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 752 753ifdef::VK_EXT_image_drm_format_modifier[] 754[open,refpage='VkPhysicalDeviceImageDrmFormatModifierInfoEXT',desc='Structure specifying a DRM format modifier as image creation parameter',type='structs'] 755-- 756To query the image capabilities that are compatible with a 757<<glossary-drm-format-modifier,Linux DRM format modifier>>, set 758slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling to 759ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and add a 760slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure to the 761pname:pNext chain of slink:VkPhysicalDeviceImageFormatInfo2. 762 763The slink:VkPhysicalDeviceImageDrmFormatModifierInfoEXT structure is defined 764as: 765 766include::{generated}/api/structs/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.adoc[] 767 768 * pname:sType is a elink:VkStructureType value identifying this structure. 769 * pname:pNext is `NULL` or a pointer to a structure extending this 770 structure. 771 * pname:drmFormatModifier is the image's _Linux DRM format modifier_, 772 corresponding to 773 slink:VkImageDrmFormatModifierExplicitCreateInfoEXT::pname:modifier or 774 to slink:VkImageDrmFormatModifierListCreateInfoEXT::pname:pModifiers. 775 * pname:sharingMode specifies how the image will be accessed by multiple 776 queue families. 777 * pname:queueFamilyIndexCount is the number of entries in the 778 pname:pQueueFamilyIndices array. 779 * pname:pQueueFamilyIndices is a pointer to an array of queue families 780 that will access the image. 781 It is ignored if pname:sharingMode is not 782 ename:VK_SHARING_MODE_CONCURRENT. 783 784If the pname:drmFormatModifier is incompatible with the parameters specified 785in slink:VkPhysicalDeviceImageFormatInfo2 and its pname:pNext chain, then 786flink:vkGetPhysicalDeviceImageFormatProperties2 returns 787ename:VK_ERROR_FORMAT_NOT_SUPPORTED. 788The implementation must: support the query of any pname:drmFormatModifier, 789including unknown and invalid modifier values. 790 791.Valid Usage 792**** 793 * [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02314]] 794 If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, then 795 pname:pQueueFamilyIndices must: be a valid pointer to an array of 796 pname:queueFamilyIndexCount code:uint32_t values 797 * [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02315]] 798 If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, then 799 pname:queueFamilyIndexCount must: be greater than `1` 800 * [[VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02316]] 801 If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, each element 802 of pname:pQueueFamilyIndices must: be unique and must: be less than the 803 pname:pQueueFamilyPropertyCount returned by 804 flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the 805 pname:physicalDevice that was used to create pname:device 806**** 807 808include::{generated}/validity/structs/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.adoc[] 809-- 810endif::VK_EXT_image_drm_format_modifier[] 811 812ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] 813[open,refpage='VkSamplerYcbcrConversionImageFormatProperties',desc='Structure specifying combined image sampler descriptor count for multi-planar images',type='structs'] 814-- 815To determine the number of combined image samplers required to support a 816multi-planar format, add slink:VkSamplerYcbcrConversionImageFormatProperties 817to the pname:pNext chain of the slink:VkImageFormatProperties2 structure in 818a call to fname:vkGetPhysicalDeviceImageFormatProperties2. 819 820The sname:VkSamplerYcbcrConversionImageFormatProperties structure is defined 821as: 822 823include::{generated}/api/structs/VkSamplerYcbcrConversionImageFormatProperties.adoc[] 824 825ifdef::VK_KHR_sampler_ycbcr_conversion[] 826or the equivalent 827 828include::{generated}/api/structs/VkSamplerYcbcrConversionImageFormatPropertiesKHR.adoc[] 829endif::VK_KHR_sampler_ycbcr_conversion[] 830 831 * pname:sType is a elink:VkStructureType value identifying this structure. 832 * pname:pNext is `NULL` or a pointer to a structure extending this 833 structure. 834 * pname:combinedImageSamplerDescriptorCount is the number of combined 835 image sampler descriptors that the implementation uses to access the 836 format. 837 838include::{generated}/validity/structs/VkSamplerYcbcrConversionImageFormatProperties.adoc[] 839-- 840 841pname:combinedImageSamplerDescriptorCount is a number between 1 and the 842number of planes in the format. 843A descriptor set layout binding with immutable {YCbCr} conversion samplers 844will have a maximum pname:combinedImageSamplerDescriptorCount which is the 845maximum across all formats supported by its samplers of the 846pname:combinedImageSamplerDescriptorCount for each format. 847Descriptor sets with that layout will internally use that maximum 848pname:combinedImageSamplerDescriptorCount descriptors for each descriptor in 849the binding. 850This expanded number of descriptors will be consumed from the descriptor 851pool when a descriptor set is allocated, and counts towards the 852pname:maxDescriptorSetSamplers, pname:maxDescriptorSetSampledImages, 853pname:maxPerStageDescriptorSamplers, and 854pname:maxPerStageDescriptorSampledImages limits. 855 856.Note 857[NOTE] 858==== 859All descriptors in a binding use the same maximum 860pname:combinedImageSamplerDescriptorCount descriptors to allow 861implementations to use a uniform stride for dynamic indexing of the 862descriptors in the binding. 863 864For example, consider a descriptor set layout binding with two descriptors 865and immutable samplers for multi-planar formats that have 866sname:VkSamplerYcbcrConversionImageFormatProperties::pname:combinedImageSamplerDescriptorCount 867values of `2` and `3` respectively. 868There are two descriptors in the binding and the maximum 869pname:combinedImageSamplerDescriptorCount is `3`, so descriptor sets with 870this layout consume `6` descriptors from the descriptor pool. 871To create a descriptor pool that allows allocating four descriptor sets with 872this layout, pname:descriptorCount must be at least `24`. 873==== 874 875ifdef::VK_KHR_maintenance6[] 876Instead of querying all the potential formats that the application might use 877in the descriptor layout, the application can: use the 878slink:VkPhysicalDeviceMaintenance6PropertiesKHR::pname:maxCombinedImageSamplerDescriptorCount 879property to determine the maximum descriptor size that that will accommodate 880any and all <<formats-requiring-sampler-ycbcr-conversion, formats that 881require a sampler {YCbCr} conversion>> supported by the implementation. 882endif::VK_KHR_maintenance6[] 883 884endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] 885 886ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] 887 888[open,refpage='VkAndroidHardwareBufferUsageANDROID',desc='Struct containing Android hardware buffer usage flags',type='structs'] 889-- 890To obtain optimal Android hardware buffer usage flags for specific image 891creation parameters, add a sname:VkAndroidHardwareBufferUsageANDROID 892structure to the pname:pNext chain of a slink:VkImageFormatProperties2 893structure passed to flink:vkGetPhysicalDeviceImageFormatProperties2. 894This structure is defined as: 895 896include::{generated}/api/structs/VkAndroidHardwareBufferUsageANDROID.adoc[] 897 898 * pname:sType is a elink:VkStructureType value identifying this structure. 899 * pname:pNext is `NULL` or a pointer to a structure extending this 900 structure. 901 * pname:androidHardwareBufferUsage returns the Android hardware buffer 902 usage flags. 903 904The pname:androidHardwareBufferUsage field must: include Android hardware 905buffer usage flags listed in the 906<<memory-external-android-hardware-buffer-usage,AHardwareBuffer Usage 907Equivalence>> table when the corresponding Vulkan image usage or image 908creation flags are included in the pname:usage or pname:flags fields of 909slink:VkPhysicalDeviceImageFormatInfo2. 910It must: include at least one GPU usage flag 911(code:AHARDWAREBUFFER_USAGE_GPU_*), even if none of the corresponding Vulkan 912usages or flags are requested. 913 914.Note 915[NOTE] 916==== 917Requiring at least one GPU usage flag ensures that Android hardware buffer 918memory will be allocated in a memory pool accessible to the Vulkan 919implementation, and that specializing the memory layout based on usage flags 920does not prevent it from being compatible with Vulkan. 921Implementations may: avoid unnecessary restrictions caused by this 922requirement by using vendor usage flags to indicate that only the Vulkan 923uses indicated in slink:VkImageFormatProperties2 are required. 924==== 925 926include::{generated}/validity/structs/VkAndroidHardwareBufferUsageANDROID.adoc[] 927-- 928 929endif::VK_ANDROID_external_memory_android_hardware_buffer[] 930 931ifdef::VK_EXT_host_image_copy[] 932 933[open,refpage='VkHostImageCopyDevicePerformanceQueryEXT',desc='Struct containing information about optimality of device access',type='structs'] 934-- 935To query if using ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT has a negative 936impact on device performance when accessing an image, add 937ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT to 938slink:VkPhysicalDeviceImageFormatInfo2::pname:usage, and add a 939sname:VkHostImageCopyDevicePerformanceQueryEXT structure to the pname:pNext 940chain of a slink:VkImageFormatProperties2 structure passed to 941flink:vkGetPhysicalDeviceImageFormatProperties2. 942This structure is defined as: 943 944include::{generated}/api/structs/VkHostImageCopyDevicePerformanceQueryEXT.adoc[] 945 946 * pname:sType is a elink:VkStructureType value identifying this structure. 947 * pname:pNext is `NULL` or a pointer to a structure extending this 948 structure. 949 * pname:optimalDeviceAccess returns ename:VK_TRUE if use of host image 950 copy has no adverse effect on device access performance, compared to an 951 image that is created with exact same creation parameters, and bound to 952 the same slink:VkDeviceMemory, except that 953 ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT is replaced with 954 ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT and 955 ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT. 956 * pname:identicalMemoryLayout returns ename:VK_TRUE if use of host image 957 copy has no impact on memory layout compared to an image that is created 958 with exact same creation parameters, and bound to the same 959 slink:VkDeviceMemory, except that 960 ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT is replaced with 961 ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT and 962 ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT. 963 964The implementation may: return ename:VK_FALSE in pname:optimalDeviceAccess 965if pname:identicalMemoryLayout is ename:VK_FALSE. 966If pname:identicalMemoryLayout is ename:VK_TRUE, pname:optimalDeviceAccess 967must: be ename:VK_TRUE. 968 969The implementation may: return ename:VK_TRUE in pname:optimalDeviceAccess 970while pname:identicalMemoryLayout is ename:VK_FALSE. 971In this situation, any device performance impact should: not be measurable. 972 973If slink:VkPhysicalDeviceImageFormatInfo2::pname:format is a 974block-compressed format and flink:vkGetPhysicalDeviceImageFormatProperties2 975returns ename:VK_SUCCESS, the implementation must: return ename:VK_TRUE in 976pname:optimalDeviceAccess. 977 978.Note 979[NOTE] 980==== 981Applications can make use of pname:optimalDeviceAccess to determine their 982resource copying strategy. 983If a resource is expected to be accessed more on device than on the host, 984and the implementation considers the resource sub-optimally accessed, it is 985likely better to use device copies instead. 986==== 987 988.Note 989[NOTE] 990==== 991Layout not being identical yet still considered optimal for device access 992could happen if the implementation has different memory layout patterns, 993some of which are easier to access on the host. 994==== 995 996.Note 997[NOTE] 998==== 999The most practical reason for pname:optimalDeviceAccess to be ename:VK_FALSE 1000is that host image access may disable framebuffer compression where it would 1001otherwise have been enabled. 1002This represents far more efficient host image access since no compression 1003algorithm is required to read or write to the image, but it would impact 1004device access performance. 1005Some implementations may only set pname:optimalDeviceAccess to 1006ename:VK_FALSE if certain conditions are met, such as specific image usage 1007flags or creation flags. 1008==== 1009 1010include::{generated}/validity/structs/VkHostImageCopyDevicePerformanceQueryEXT.adoc[] 1011-- 1012 1013endif::VK_EXT_host_image_copy[] 1014 1015ifdef::VK_EXT_filter_cubic[] 1016 1017To determine if cubic filtering can be used with a given image format and a 1018given image view type add a 1019slink:VkPhysicalDeviceImageViewImageFormatInfoEXT structure to the 1020pname:pNext chain of the slink:VkPhysicalDeviceImageFormatInfo2 structure, 1021and a slink:VkFilterCubicImageViewImageFormatPropertiesEXT structure to the 1022pname:pNext chain of the slink:VkImageFormatProperties2 structure. 1023 1024[open,refpage='VkPhysicalDeviceImageViewImageFormatInfoEXT',desc='Structure for providing image view type',type='structs'] 1025-- 1026The sname:VkPhysicalDeviceImageViewImageFormatInfoEXT structure is defined 1027as: 1028 1029include::{generated}/api/structs/VkPhysicalDeviceImageViewImageFormatInfoEXT.adoc[] 1030 1031 * pname:sType is a elink:VkStructureType value identifying this structure. 1032 * pname:pNext is `NULL` or a pointer to a structure extending this 1033 structure. 1034 * pname:imageViewType is a elink:VkImageViewType value specifying the type 1035 of the image view. 1036 1037include::{generated}/validity/structs/VkPhysicalDeviceImageViewImageFormatInfoEXT.adoc[] 1038-- 1039 1040[open,refpage='VkFilterCubicImageViewImageFormatPropertiesEXT',desc='Structure for querying cubic filtering capabilities of an image view type',type='structs'] 1041-- 1042The sname:VkFilterCubicImageViewImageFormatPropertiesEXT structure is 1043defined as: 1044 1045include::{generated}/api/structs/VkFilterCubicImageViewImageFormatPropertiesEXT.adoc[] 1046 1047 * pname:sType is a elink:VkStructureType value identifying this structure. 1048 * pname:pNext is `NULL` or a pointer to a structure extending this 1049 structure. 1050 * pname:filterCubic tells if image format, image type and image view type 1051 can: be used with cubic filtering. 1052 This field is set by the implementation. 1053 User-specified value is ignored. 1054 * pname:filterCubicMinmax tells if image format, image type and image view 1055 type can: be used with cubic filtering and minmax filtering. 1056 This field is set by the implementation. 1057 User-specified value is ignored. 1058 1059include::{generated}/validity/structs/VkFilterCubicImageViewImageFormatPropertiesEXT.adoc[] 1060 1061.Valid Usage 1062**** 1063 * [[VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-pNext-02627]] 1064 If the pname:pNext chain of the slink:VkImageFormatProperties2 structure 1065 includes a slink:VkFilterCubicImageViewImageFormatPropertiesEXT 1066 structure, the pname:pNext chain of the 1067 slink:VkPhysicalDeviceImageFormatInfo2 structure must: include a 1068 slink:VkPhysicalDeviceImageViewImageFormatInfoEXT structure with an 1069 pname:imageViewType that is compatible with pname:imageType 1070**** 1071-- 1072endif::VK_EXT_filter_cubic[] 1073endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] 1074 1075 1076[[features-supported-sample-counts]] 1077=== Supported Sample Counts 1078 1079fname:vkGetPhysicalDeviceImageFormatProperties returns a bitmask of 1080elink:VkSampleCountFlagBits in pname:sampleCounts specifying the supported 1081sample counts for the image parameters. 1082 1083pname:sampleCounts will be set to ename:VK_SAMPLE_COUNT_1_BIT if at least 1084one of the following conditions is true: 1085 1086 * pname:tiling is ename:VK_IMAGE_TILING_LINEAR 1087 * pname:type is not ename:VK_IMAGE_TYPE_2D 1088 * pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT 1089 * Neither the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag nor the 1090 ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT flag in 1091 sname:VkFormatProperties::pname:optimalTilingFeatures returned by 1092 flink:vkGetPhysicalDeviceFormatProperties is set 1093ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 1094 * slink:VkPhysicalDeviceExternalImageFormatInfo::pname:handleType is an 1095 external handle type for which multisampled image support is not 1096 required. 1097endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 1098ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] 1099 * pname:format is one of the <<formats-requiring-sampler-ycbcr-conversion, 1100 formats that require a sampler {YCbCr} conversion>> 1101endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] 1102ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[] 1103 * pname:usage contains 1104 ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR 1105endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[] 1106ifdef::VK_EXT_fragment_density_map[] 1107 * pname:usage contains ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT 1108endif::VK_EXT_fragment_density_map[] 1109 1110Otherwise, the bits set in pname:sampleCounts will be the sample counts 1111supported for the specified values of pname:usage and pname:format. 1112For each bit set in pname:usage, the supported sample counts relate to the 1113limits in sname:VkPhysicalDeviceLimits as follows: 1114 1115 * If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and 1116 pname:format is a floating- or fixed-point color format, a superset of 1117 sname:VkPhysicalDeviceLimits::pname:framebufferColorSampleCounts 1118ifdef::VK_VERSION_1_2[] 1119 * If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and 1120 pname:format is an integer format, a superset of 1121 sname:VkPhysicalDeviceVulkan12Properties::pname:framebufferIntegerColorSampleCounts 1122endif::VK_VERSION_1_2[] 1123 * If pname:usage includes 1124 ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format 1125 includes a depth component, a superset of 1126 sname:VkPhysicalDeviceLimits::pname:framebufferDepthSampleCounts 1127 * If pname:usage includes 1128 ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format 1129 includes a stencil component, a superset of 1130 sname:VkPhysicalDeviceLimits::pname:framebufferStencilSampleCounts 1131 * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and 1132 pname:format includes a color component, a superset of 1133 sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts 1134 * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and 1135 pname:format includes a depth component, a superset of 1136 sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts 1137 * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and 1138 pname:format is an integer format, a superset of 1139 sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts 1140 * If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, a superset of 1141 sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts 1142 1143If multiple bits are set in pname:usage, pname:sampleCounts will be the 1144intersection of the per-usage values described above. 1145 1146If none of the bits described above are set in pname:usage, then there is no 1147corresponding limit in sname:VkPhysicalDeviceLimits. 1148In this case, pname:sampleCounts must: include at least 1149ename:VK_SAMPLE_COUNT_1_BIT. 1150 1151 1152[[features-extentperimagetype]] 1153=== Allowed Extent Values Based on Image Type 1154 1155Implementations may: support extent values larger than the <<limits-minmax, 1156required minimum/maximum values>> for certain types of images. 1157slink:VkImageFormatProperties::pname:maxExtent for each type is subject to 1158the constraints below. 1159 1160[NOTE] 1161.Note 1162==== 1163Implementations must: support images with dimensions up to the 1164<<limits-minmax, required minimum/maximum values>> for all types of images. 1165It follows that the query for additional capabilities must: return extent 1166values that are at least as large as the required values. 1167==== 1168 1169For ename:VK_IMAGE_TYPE_1D: 1170 1171 * [eq]#pname:maxExtent.width {geq} 1172 slink:VkPhysicalDeviceLimits::pname:maxImageDimension1D# 1173 * [eq]#pname:maxExtent.height = 1# 1174 * [eq]#pname:maxExtent.depth = 1# 1175 1176For ename:VK_IMAGE_TYPE_2D when pname:flags does not contain 1177ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT: 1178 1179 * [eq]#pname:maxExtent.width {geq} 1180 slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D# 1181 * [eq]#pname:maxExtent.height {geq} 1182 slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D# 1183 * [eq]#pname:maxExtent.depth = 1# 1184 1185For ename:VK_IMAGE_TYPE_2D when pname:flags contains 1186ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT: 1187 1188 * [eq]#pname:maxExtent.width {geq} 1189 slink:VkPhysicalDeviceLimits::pname:maxImageDimensionCube# 1190 * [eq]#pname:maxExtent.height {geq} 1191 slink:VkPhysicalDeviceLimits::pname:maxImageDimensionCube# 1192 * [eq]#pname:maxExtent.depth = 1# 1193 1194For ename:VK_IMAGE_TYPE_3D: 1195 1196 * [eq]#pname:maxExtent.width {geq} 1197 slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D# 1198 * [eq]#pname:maxExtent.height {geq} 1199 slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D# 1200 * [eq]#pname:maxExtent.depth {geq} 1201 slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D# 1202 1203 1204ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 1205[[capabilities-buffer]] 1206== Additional Buffer Capabilities 1207 1208[open,refpage='vkGetPhysicalDeviceExternalBufferProperties',desc='Query external handle types supported by buffers',type='protos'] 1209-- 1210To query the external handle types supported by buffers, call: 1211 1212ifdef::VK_VERSION_1_1[] 1213include::{generated}/api/protos/vkGetPhysicalDeviceExternalBufferProperties.adoc[] 1214endif::VK_VERSION_1_1[] 1215 1216ifdef::VK_VERSION_1_1+VK_KHR_external_memory_capabilities[or the equivalent command] 1217 1218ifdef::VK_KHR_external_memory_capabilities[] 1219include::{generated}/api/protos/vkGetPhysicalDeviceExternalBufferPropertiesKHR.adoc[] 1220endif::VK_KHR_external_memory_capabilities[] 1221 1222 * pname:physicalDevice is the physical device from which to query the 1223 buffer capabilities. 1224 * pname:pExternalBufferInfo is a pointer to a 1225 slink:VkPhysicalDeviceExternalBufferInfo structure describing the 1226 parameters that would be consumed by flink:vkCreateBuffer. 1227 * pname:pExternalBufferProperties is a pointer to a 1228 slink:VkExternalBufferProperties structure in which capabilities are 1229 returned. 1230 1231include::{generated}/validity/protos/vkGetPhysicalDeviceExternalBufferProperties.adoc[] 1232-- 1233 1234[open,refpage='VkPhysicalDeviceExternalBufferInfo',desc='Structure specifying buffer creation parameters',type='structs'] 1235-- 1236:refpage: VkPhysicalDeviceExternalBufferInfo 1237 1238The sname:VkPhysicalDeviceExternalBufferInfo structure is defined as: 1239 1240include::{generated}/api/structs/VkPhysicalDeviceExternalBufferInfo.adoc[] 1241 1242ifdef::VK_KHR_external_memory_capabilities[] 1243or the equivalent 1244 1245include::{generated}/api/structs/VkPhysicalDeviceExternalBufferInfoKHR.adoc[] 1246endif::VK_KHR_external_memory_capabilities[] 1247 1248 * pname:sType is a elink:VkStructureType value identifying this structure. 1249 * pname:pNext is `NULL` or a pointer to a structure extending this 1250 structure. 1251 * pname:flags is a bitmask of elink:VkBufferCreateFlagBits describing 1252 additional parameters of the buffer, corresponding to 1253 slink:VkBufferCreateInfo::pname:flags. 1254 * pname:usage is a bitmask of elink:VkBufferUsageFlagBits describing the 1255 intended usage of the buffer, corresponding to 1256 slink:VkBufferCreateInfo::pname:usage. 1257 * pname:handleType is a elink:VkExternalMemoryHandleTypeFlagBits value 1258 specifying the memory handle type that will be used with the memory 1259 associated with the buffer. 1260 1261Only usage flags representable in elink:VkBufferUsageFlagBits are returned 1262in this structure's pname:usage. 1263ifdef::VK_KHR_maintenance5[] 1264If a slink:VkBufferUsageFlags2CreateInfoKHR structure is present in the 1265pname:pNext chain, all usage flags of the buffer are returned in 1266slink:VkBufferUsageFlags2CreateInfoKHR::pname:usage. 1267endif::VK_KHR_maintenance5[] 1268 1269.Valid Usage 1270**** 1271include::{chapters}/commonvalidity/buffer_usage_flags_common.adoc[] 1272**** 1273 1274include::{generated}/validity/structs/VkPhysicalDeviceExternalBufferInfo.adoc[] 1275-- 1276 1277[open,refpage='VkExternalBufferProperties',desc='Structure specifying supported external handle capabilities',type='structs'] 1278-- 1279The sname:VkExternalBufferProperties structure is defined as: 1280 1281include::{generated}/api/structs/VkExternalBufferProperties.adoc[] 1282 1283ifdef::VK_KHR_external_memory_capabilities[] 1284or the equivalent 1285 1286include::{generated}/api/structs/VkExternalBufferPropertiesKHR.adoc[] 1287endif::VK_KHR_external_memory_capabilities[] 1288 1289 * pname:sType is a elink:VkStructureType value identifying this structure. 1290 * pname:pNext is `NULL` or a pointer to a structure extending this 1291 structure. 1292 * pname:externalMemoryProperties is a slink:VkExternalMemoryProperties 1293 structure specifying various capabilities of the external handle type 1294 when used with the specified buffer creation parameters. 1295 1296include::{generated}/validity/structs/VkExternalBufferProperties.adoc[] 1297-- 1298endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[] 1299 1300 1301ifdef::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[] 1302[[capabilities-semaphore]] 1303== Optional Semaphore Capabilities 1304 1305[open,refpage='vkGetPhysicalDeviceExternalSemaphoreProperties',desc='Function for querying external semaphore handle capabilities.',type='protos'] 1306-- 1307Semaphores may: support import and export of their 1308<<synchronization-semaphores-payloads, payload>> to external handles. 1309To query the external handle types supported by semaphores, call: 1310 1311ifdef::VK_VERSION_1_1[] 1312include::{generated}/api/protos/vkGetPhysicalDeviceExternalSemaphoreProperties.adoc[] 1313endif::VK_VERSION_1_1[] 1314 1315ifdef::VK_VERSION_1_1+VK_KHR_external_semaphore_capabilities[or the equivalent command] 1316 1317ifdef::VK_KHR_external_semaphore_capabilities[] 1318include::{generated}/api/protos/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.adoc[] 1319endif::VK_KHR_external_semaphore_capabilities[] 1320 1321 * pname:physicalDevice is the physical device from which to query the 1322 semaphore capabilities. 1323 * pname:pExternalSemaphoreInfo is a pointer to a 1324 slink:VkPhysicalDeviceExternalSemaphoreInfo structure describing the 1325 parameters that would be consumed by flink:vkCreateSemaphore. 1326 * pname:pExternalSemaphoreProperties is a pointer to a 1327 slink:VkExternalSemaphoreProperties structure in which capabilities are 1328 returned. 1329 1330include::{generated}/validity/protos/vkGetPhysicalDeviceExternalSemaphoreProperties.adoc[] 1331-- 1332 1333[open,refpage='VkPhysicalDeviceExternalSemaphoreInfo',desc='Structure specifying semaphore creation parameters.',type='structs'] 1334-- 1335The sname:VkPhysicalDeviceExternalSemaphoreInfo structure is defined as: 1336 1337include::{generated}/api/structs/VkPhysicalDeviceExternalSemaphoreInfo.adoc[] 1338 1339ifdef::VK_KHR_external_semaphore_capabilities[] 1340or the equivalent 1341 1342include::{generated}/api/structs/VkPhysicalDeviceExternalSemaphoreInfoKHR.adoc[] 1343endif::VK_KHR_external_semaphore_capabilities[] 1344 1345 * pname:sType is a elink:VkStructureType value identifying this structure. 1346 * pname:pNext is `NULL` or a pointer to a structure extending this 1347 structure. 1348 * pname:handleType is a elink:VkExternalSemaphoreHandleTypeFlagBits value 1349 specifying the external semaphore handle type for which capabilities 1350 will be returned. 1351 1352include::{generated}/validity/structs/VkPhysicalDeviceExternalSemaphoreInfo.adoc[] 1353-- 1354 1355[open,refpage='VkExternalSemaphoreHandleTypeFlagBits',desc='Bitmask of valid external semaphore handle types',type='enums'] 1356-- 1357Bits which may: be set in 1358slink:VkPhysicalDeviceExternalSemaphoreInfo::pname:handleType, specifying an 1359external semaphore handle type, are: 1360 1361include::{generated}/api/enums/VkExternalSemaphoreHandleTypeFlagBits.adoc[] 1362 1363ifdef::VK_KHR_external_semaphore_capabilities[] 1364or the equivalent 1365 1366include::{generated}/api/enums/VkExternalSemaphoreHandleTypeFlagBitsKHR.adoc[] 1367endif::VK_KHR_external_semaphore_capabilities[] 1368 1369 * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX 1370 file descriptor handle that has only limited valid usage outside of 1371 Vulkan and other compatible APIs. 1372 It must: be compatible with the POSIX system calls code:dup, code:dup2, 1373 code:close, and the non-standard system call code:dup3. 1374 Additionally, it must: be transportable over a socket using an 1375 code:SCM_RIGHTS control message. 1376 It owns a reference to the underlying synchronization primitive 1377 represented by its Vulkan semaphore object. 1378 * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT 1379 handle that has only limited valid usage outside of Vulkan and other 1380 compatible APIs. 1381 It must: be compatible with the functions code:DuplicateHandle, 1382 code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation, 1383 and code:SetHandleInformation. 1384 It owns a reference to the underlying synchronization primitive 1385 represented by its Vulkan semaphore object. 1386 * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a 1387 global share handle that has only limited valid usage outside of Vulkan 1388 and other compatible APIs. 1389 It is not compatible with any native APIs. 1390 It does not own a reference to the underlying synchronization primitive 1391 represented by its Vulkan semaphore object, and will therefore become 1392 invalid when all Vulkan semaphore objects associated with it are 1393 destroyed. 1394 * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT specifies an NT 1395 handle returned by code:ID3D12Device::code:CreateSharedHandle referring 1396 to a Direct3D 12 fence, or code:ID3D11Device5::code:CreateFence 1397 referring to a Direct3D 11 fence. 1398 It owns a reference to the underlying synchronization primitive 1399 associated with the Direct3D fence. 1400 * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT is an alias of 1401 ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT with the same 1402 meaning. 1403 It is provided for convenience and code clarity when interacting with 1404 D3D11 fences. 1405 * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT specifies a POSIX 1406 file descriptor handle to a Linux Sync File or Android Fence object. 1407 It can be used with any native API accepting a valid sync file or fence 1408 as input. 1409 It owns a reference to the underlying synchronization primitive 1410 associated with the file descriptor. 1411 Implementations which support importing this handle type must: accept 1412 any type of sync or fence FD supported by the native system they are 1413 running on. 1414ifdef::VK_FUCHSIA_external_semaphore[] 1415 * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA 1416 specifies a handle to a Zircon event object. 1417 It can be used with any native API that accepts a Zircon event handle. 1418 Zircon event handles are created with code:ZX_RIGHTS_BASIC and 1419 code:ZX_RIGHTS_SIGNAL rights. 1420 Vulkan on Fuchsia uses only the ZX_EVENT_SIGNALED bit when signaling or 1421 waiting. 1422endif::VK_FUCHSIA_external_semaphore[] 1423ifdef::VK_NV_external_sci_sync[] 1424 * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV specifies a 1425 synchronization object (code:NvSciSyncObj) shareable across various 1426 hardware engines including the CPU and software (intra-process and 1427 inter-process) operating domains and perform signal and wait operations. 1428endif::VK_NV_external_sci_sync[] 1429 1430[NOTE] 1431.Note 1432==== 1433Handles of type ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT 1434generated by the implementation may represent either Linux Sync Files or 1435Android Fences at the implementation's discretion. 1436Applications should: only use operations defined for both types of file 1437descriptors, unless they know via means external to Vulkan the type of the 1438file descriptor, or are prepared to deal with the system-defined operation 1439failures resulting from using the wrong type. 1440==== 1441 1442<<< 1443 1444Some external semaphore handle types can only be shared within the same 1445underlying physical device and/or the same driver version, as defined in the 1446following table: 1447 1448[[external-semaphore-handle-types-compatibility]] 1449.External semaphore handle types compatibility 1450|==== 1451| Handle type | sname:VkPhysicalDeviceIDProperties{wbro}::pname:driverUUID | sname:VkPhysicalDeviceIDProperties{wbro}::pname:deviceUUID 1452| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match 1453| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match 1454| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match 1455| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT | Must match | Must match 1456| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT | No restriction | No restriction 1457| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA | No restriction | No restriction 1458ifdef::VK_NV_external_sci_sync[] 1459| ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV | No restriction | No restriction 1460endif::VK_NV_external_sci_sync[] 1461|==== 1462-- 1463 1464[open,refpage='VkExternalSemaphoreHandleTypeFlags',desc='Bitmask of VkExternalSemaphoreHandleTypeFlagBits',type='flags'] 1465-- 1466include::{generated}/api/flags/VkExternalSemaphoreHandleTypeFlags.adoc[] 1467 1468ifdef::VK_KHR_external_semaphore_capabilities[] 1469or the equivalent 1470 1471include::{generated}/api/flags/VkExternalSemaphoreHandleTypeFlagsKHR.adoc[] 1472endif::VK_KHR_external_semaphore_capabilities[] 1473 1474tname:VkExternalSemaphoreHandleTypeFlags is a bitmask type for setting a 1475mask of zero or more elink:VkExternalSemaphoreHandleTypeFlagBits. 1476-- 1477 1478[open,refpage='VkExternalSemaphoreProperties',desc='Structure describing supported external semaphore handle features',type='structs'] 1479-- 1480The sname:VkExternalSemaphoreProperties structure is defined as: 1481 1482include::{generated}/api/structs/VkExternalSemaphoreProperties.adoc[] 1483 1484ifdef::VK_KHR_external_semaphore_capabilities[] 1485or the equivalent 1486 1487include::{generated}/api/structs/VkExternalSemaphorePropertiesKHR.adoc[] 1488endif::VK_KHR_external_semaphore_capabilities[] 1489 1490 * pname:sType is a elink:VkStructureType value identifying this structure. 1491 * pname:pNext is `NULL` or a pointer to a structure extending this 1492 structure. 1493 * pname:exportFromImportedHandleTypes is a bitmask of 1494 elink:VkExternalSemaphoreHandleTypeFlagBits specifying which types of 1495 imported handle pname:handleType can: be exported from. 1496 * pname:compatibleHandleTypes is a bitmask of 1497 elink:VkExternalSemaphoreHandleTypeFlagBits specifying handle types 1498 which can: be specified at the same time as pname:handleType when 1499 creating a semaphore. 1500 * pname:externalSemaphoreFeatures is a bitmask of 1501 elink:VkExternalSemaphoreFeatureFlagBits describing the features of 1502 pname:handleType. 1503 1504If pname:handleType is not supported by the implementation, then 1505slink:VkExternalSemaphoreProperties::pname:externalSemaphoreFeatures will be 1506set to zero. 1507 1508include::{generated}/validity/structs/VkExternalSemaphoreProperties.adoc[] 1509-- 1510 1511[open,refpage='VkExternalSemaphoreFeatureFlagBits',desc='Bitfield describing features of an external semaphore handle type',type='enums'] 1512-- 1513Bits which may: be set in 1514slink:VkExternalSemaphoreProperties::pname:externalSemaphoreFeatures, 1515specifying the features of an external semaphore handle type, are: 1516 1517include::{generated}/api/enums/VkExternalSemaphoreFeatureFlagBits.adoc[] 1518 1519ifdef::VK_KHR_external_semaphore_capabilities[] 1520or the equivalent 1521 1522include::{generated}/api/enums/VkExternalSemaphoreFeatureFlagBitsKHR.adoc[] 1523endif::VK_KHR_external_semaphore_capabilities[] 1524 1525 * ename:VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT specifies that 1526 handles of this type can: be exported from Vulkan semaphore objects. 1527 * ename:VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT specifies that 1528 handles of this type can: be imported as Vulkan semaphore objects. 1529-- 1530 1531[open,refpage='VkExternalSemaphoreFeatureFlags',desc='Bitmask of VkExternalSemaphoreFeatureFlagBitsKHR',type='flags'] 1532-- 1533include::{generated}/api/flags/VkExternalSemaphoreFeatureFlags.adoc[] 1534 1535ifdef::VK_KHR_external_semaphore_capabilities[] 1536or the equivalent 1537 1538include::{generated}/api/flags/VkExternalSemaphoreFeatureFlagsKHR.adoc[] 1539endif::VK_KHR_external_semaphore_capabilities[] 1540 1541tname:VkExternalSemaphoreFeatureFlags is a bitmask type for setting a mask 1542of zero or more elink:VkExternalSemaphoreFeatureFlagBits. 1543-- 1544endif::VK_VERSION_1_1,VK_KHR_external_semaphore_capabilities[] 1545 1546 1547ifdef::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[] 1548[[capabilities-fence]] 1549== Optional Fence Capabilities 1550 1551[open,refpage='vkGetPhysicalDeviceExternalFenceProperties',desc='Function for querying external fence handle capabilities.',type='protos'] 1552-- 1553Fences may: support import and export of their 1554<<synchronization-fences-payloads, payload>> to external handles. 1555To query the external handle types supported by fences, call: 1556 1557ifdef::VK_VERSION_1_1[] 1558include::{generated}/api/protos/vkGetPhysicalDeviceExternalFenceProperties.adoc[] 1559endif::VK_VERSION_1_1[] 1560 1561ifdef::VK_VERSION_1_1+VK_KHR_external_fence_capabilities[or the equivalent command] 1562 1563ifdef::VK_KHR_external_fence_capabilities[] 1564include::{generated}/api/protos/vkGetPhysicalDeviceExternalFencePropertiesKHR.adoc[] 1565endif::VK_KHR_external_fence_capabilities[] 1566 1567 * pname:physicalDevice is the physical device from which to query the 1568 fence capabilities. 1569 * pname:pExternalFenceInfo is a pointer to a 1570 slink:VkPhysicalDeviceExternalFenceInfo structure describing the 1571 parameters that would be consumed by flink:vkCreateFence. 1572 * pname:pExternalFenceProperties is a pointer to a 1573 slink:VkExternalFenceProperties structure in which capabilities are 1574 returned. 1575 1576include::{generated}/validity/protos/vkGetPhysicalDeviceExternalFenceProperties.adoc[] 1577-- 1578 1579[open,refpage='VkPhysicalDeviceExternalFenceInfo',desc='Structure specifying fence creation parameters.',type='structs'] 1580-- 1581The sname:VkPhysicalDeviceExternalFenceInfo structure is defined as: 1582 1583include::{generated}/api/structs/VkPhysicalDeviceExternalFenceInfo.adoc[] 1584 1585ifdef::VK_KHR_external_fence_capabilities[] 1586or the equivalent 1587 1588include::{generated}/api/structs/VkPhysicalDeviceExternalFenceInfoKHR.adoc[] 1589endif::VK_KHR_external_fence_capabilities[] 1590 1591 * pname:sType is a elink:VkStructureType value identifying this structure. 1592 * pname:pNext is `NULL` or a pointer to a structure extending this 1593 structure. 1594 * pname:handleType is a elink:VkExternalFenceHandleTypeFlagBits value 1595 specifying an external fence handle type for which capabilities will be 1596 returned. 1597 1598[NOTE] 1599.Note 1600==== 1601Handles of type ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT generated by 1602the implementation may represent either Linux Sync Files or Android Fences 1603at the implementation's discretion. 1604Applications should: only use operations defined for both types of file 1605descriptors, unless they know via means external to Vulkan the type of the 1606file descriptor, or are prepared to deal with the system-defined operation 1607failures resulting from using the wrong type. 1608==== 1609 1610include::{generated}/validity/structs/VkPhysicalDeviceExternalFenceInfo.adoc[] 1611-- 1612 1613[open,refpage='VkExternalFenceHandleTypeFlagBits',desc='Bitmask of valid external fence handle types',type='enums'] 1614-- 1615Bits which may: be set in 1616 1617 * slink:VkPhysicalDeviceExternalFenceInfo::pname:handleType 1618 * slink:VkExternalFenceProperties::pname:exportFromImportedHandleTypes 1619 * slink:VkExternalFenceProperties::pname:compatibleHandleTypes 1620 1621indicate external fence handle types, and are: 1622 1623include::{generated}/api/enums/VkExternalFenceHandleTypeFlagBits.adoc[] 1624 1625ifdef::VK_KHR_external_fence_capabilities[] 1626or the equivalent 1627 1628include::{generated}/api/enums/VkExternalFenceHandleTypeFlagBitsKHR.adoc[] 1629endif::VK_KHR_external_fence_capabilities[] 1630 1631 * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX file 1632 descriptor handle that has only limited valid usage outside of Vulkan 1633 and other compatible APIs. 1634 It must: be compatible with the POSIX system calls code:dup, code:dup2, 1635 code:close, and the non-standard system call code:dup3. 1636 Additionally, it must: be transportable over a socket using an 1637 code:SCM_RIGHTS control message. 1638 It owns a reference to the underlying synchronization primitive 1639 represented by its Vulkan fence object. 1640 * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT 1641 handle that has only limited valid usage outside of Vulkan and other 1642 compatible APIs. 1643 It must: be compatible with the functions code:DuplicateHandle, 1644 code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation, 1645 and code:SetHandleInformation. 1646 It owns a reference to the underlying synchronization primitive 1647 represented by its Vulkan fence object. 1648 * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a 1649 global share handle that has only limited valid usage outside of Vulkan 1650 and other compatible APIs. 1651 It is not compatible with any native APIs. 1652 It does not own a reference to the underlying synchronization primitive 1653 represented by its Vulkan fence object, and will therefore become 1654 invalid when all Vulkan fence objects associated with it are destroyed. 1655 * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT specifies a POSIX file 1656 descriptor handle to a Linux Sync File or Android Fence. 1657 It can be used with any native API accepting a valid sync file or fence 1658 as input. 1659 It owns a reference to the underlying synchronization primitive 1660 associated with the file descriptor. 1661 Implementations which support importing this handle type must: accept 1662 any type of sync or fence FD supported by the native system they are 1663 running on. 1664ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[] 1665 * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV specifies a 1666 synchronization object (code:NvSciSyncObj) shareable across various 1667 hardware engines including the CPU and software (intra-process and 1668 inter-process) operating domains and perform signal and wait operations. 1669 * ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV specifies a 1670 struct of code:NvSciSyncFence that is a snapshot of a synchronization 1671 object’s underlying primitive and represents its possible state. 1672endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[] 1673 1674<<< 1675 1676Some external fence handle types can only be shared within the same 1677underlying physical device and/or the same driver version, as defined in the 1678following table: 1679 1680[[external-fence-handle-types-compatibility]] 1681.External fence handle types compatibility 1682|==== 1683| Handle type | sname:VkPhysicalDeviceIDProperties{wbro}::pname:driverUUID | sname:VkPhysicalDeviceIDProperties{wbro}::pname:deviceUUID 1684| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT | Must match | Must match 1685| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT | Must match | Must match 1686| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT | Must match | Must match 1687| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT | No restriction | No restriction 1688ifdef::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[] 1689| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_OBJ_BIT_NV | Must match | Must match 1690| ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SCI_SYNC_FENCE_BIT_NV | Must match | Must match 1691endif::VK_NV_external_sci_sync,VK_NV_external_sci_sync2[] 1692|==== 1693-- 1694 1695[open,refpage='VkExternalFenceHandleTypeFlags',desc='Bitmask of VkExternalFenceHandleTypeFlagBits',type='flags'] 1696-- 1697include::{generated}/api/flags/VkExternalFenceHandleTypeFlags.adoc[] 1698 1699ifdef::VK_KHR_external_fence_capabilities[] 1700or the equivalent 1701 1702include::{generated}/api/flags/VkExternalFenceHandleTypeFlagsKHR.adoc[] 1703endif::VK_KHR_external_fence_capabilities[] 1704 1705tname:VkExternalFenceHandleTypeFlags is a bitmask type for setting a mask of 1706zero or more elink:VkExternalFenceHandleTypeFlagBits. 1707-- 1708 1709[open,refpage='VkExternalFenceProperties',desc='Structure describing supported external fence handle features',type='structs'] 1710-- 1711The sname:VkExternalFenceProperties structure is defined as: 1712 1713include::{generated}/api/structs/VkExternalFenceProperties.adoc[] 1714 1715ifdef::VK_KHR_external_fence_capabilities[] 1716or the equivalent 1717 1718include::{generated}/api/structs/VkExternalFencePropertiesKHR.adoc[] 1719endif::VK_KHR_external_fence_capabilities[] 1720 1721 * pname:exportFromImportedHandleTypes is a bitmask of 1722 elink:VkExternalFenceHandleTypeFlagBits indicating which types of 1723 imported handle pname:handleType can: be exported from. 1724 * pname:compatibleHandleTypes is a bitmask of 1725 elink:VkExternalFenceHandleTypeFlagBits specifying handle types which 1726 can: be specified at the same time as pname:handleType when creating a 1727 fence. 1728 * pname:externalFenceFeatures is a bitmask of 1729 elink:VkExternalFenceFeatureFlagBits indicating the features of 1730 pname:handleType. 1731 1732If pname:handleType is not supported by the implementation, then 1733slink:VkExternalFenceProperties::pname:externalFenceFeatures will be set to 1734zero. 1735 1736include::{generated}/validity/structs/VkExternalFenceProperties.adoc[] 1737-- 1738 1739[open,refpage='VkExternalFenceFeatureFlagBits',desc='Bitfield describing features of an external fence handle type',type='enums'] 1740-- 1741Bits which may: be set in 1742slink:VkExternalFenceProperties::pname:externalFenceFeatures, indicating 1743features of a fence external handle type, are: 1744 1745include::{generated}/api/enums/VkExternalFenceFeatureFlagBits.adoc[] 1746 1747ifdef::VK_KHR_external_fence_capabilities[] 1748or the equivalent 1749 1750include::{generated}/api/enums/VkExternalFenceFeatureFlagBitsKHR.adoc[] 1751endif::VK_KHR_external_fence_capabilities[] 1752 1753 * ename:VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT specifies handles of this 1754 type can: be exported from Vulkan fence objects. 1755 * ename:VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT specifies handles of this 1756 type can: be imported to Vulkan fence objects. 1757-- 1758 1759[open,refpage='VkExternalFenceFeatureFlags',desc='Bitmask of VkExternalFenceFeatureFlagBits',type='flags'] 1760-- 1761include::{generated}/api/flags/VkExternalFenceFeatureFlags.adoc[] 1762 1763ifdef::VK_KHR_external_fence_capabilities[] 1764or the equivalent 1765 1766include::{generated}/api/flags/VkExternalFenceFeatureFlagsKHR.adoc[] 1767endif::VK_KHR_external_fence_capabilities[] 1768 1769tname:VkExternalFenceFeatureFlags is a bitmask type for setting a mask of 1770zero or more elink:VkExternalFenceFeatureFlagBits. 1771-- 1772endif::VK_VERSION_1_1,VK_KHR_external_fence_capabilities[] 1773 1774 1775ifdef::VK_KHR_calibrated_timestamps,VK_EXT_calibrated_timestamps[] 1776[[features-timestamp-calibration]] 1777== Timestamp Calibration Capabilities 1778 1779[open,refpage='vkGetPhysicalDeviceCalibrateableTimeDomainsKHR',desc='Query calibrateable time domains',type='protos',alias='vkGetPhysicalDeviceCalibrateableTimeDomainsEXT'] 1780-- 1781:refpage: vkGetPhysicalDeviceCalibrateableTimeDomainsKHR 1782 1783To query the set of time domains for which a physical device supports 1784timestamp calibration, call: 1785 1786ifdef::VK_KHR_calibrated_timestamps[] 1787include::{generated}/api/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.adoc[] 1788endif::VK_KHR_calibrated_timestamps[] 1789 1790ifdef::VK_KHR_calibrated_timestamps+VK_EXT_calibrated_timestamps[or the equivalent command] 1791 1792ifdef::VK_EXT_calibrated_timestamps[] 1793include::{generated}/api/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.adoc[] 1794endif::VK_EXT_calibrated_timestamps[] 1795 1796 * pname:physicalDevice is the physical device from which to query the set 1797 of calibrateable time domains. 1798 * pname:pTimeDomainCount is a pointer to an integer related to the number 1799 of calibrateable time domains available or queried, as described below. 1800 * pname:pTimeDomains is either `NULL` or a pointer to an array of 1801 elink:VkTimeDomainKHR values, indicating the supported calibrateable 1802 time domains. 1803 1804If pname:pTimeDomains is `NULL`, then the number of calibrateable time 1805domains supported for the given pname:physicalDevice is returned in 1806pname:pTimeDomainCount. 1807Otherwise, pname:pTimeDomainCount must: point to a variable set by the user 1808to the number of elements in the pname:pTimeDomains array, and on return the 1809variable is overwritten with the number of values actually written to 1810pname:pTimeDomains. 1811If the value of pname:pTimeDomainCount is less than the number of 1812calibrateable time domains supported, at most pname:pTimeDomainCount values 1813will be written to pname:pTimeDomains, and ename:VK_INCOMPLETE will be 1814returned instead of ename:VK_SUCCESS, to indicate that not all the available 1815time domains were returned. 1816 1817include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[] 1818 1819include::{generated}/validity/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.adoc[] 1820-- 1821endif::VK_KHR_calibrated_timestamps,VK_EXT_calibrated_timestamps[] 1822 1823ifdef::VK_KHR_object_refresh[] 1824include::{chapters}/VK_KHR_object_refresh/capabilities.adoc[] 1825endif::VK_KHR_object_refresh[] 1826