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