Additional Capabilities
This chapter describes additional capabilities beyond the minimum capabilities described in the Limits and Formats chapters, including:
- Additional Image Capabilities
- Additional Buffer Capabilities
- Optional Semaphore Capabilities
- Optional Fence Capabilities
- Timestamp Calibration Capabilities
Additional Image Capabilities
Additional image capabilities, such as larger dimensions or additional sample counts for certain image types, or additional capabilities for linear tiling format images, are described in this section.
combinedImageSamplerDescriptorCount is a number between 1 and the
number of planes in the format.
A descriptor set layout binding with immutable Y′CBCR conversion samplers
will have a maximum combinedImageSamplerDescriptorCount which is the
maximum across all formats supported by its samplers of the
combinedImageSamplerDescriptorCount for each format.
Descriptor sets with that layout will internally use that maximum
combinedImageSamplerDescriptorCount descriptors for each descriptor in
the binding.
This expanded number of descriptors will be consumed from the descriptor
pool when a descriptor set is allocated, and counts towards the
maxDescriptorSetSamplers, maxDescriptorSetSampledImages,
maxPerStageDescriptorSamplers, and
maxPerStageDescriptorSampledImages limits.
All descriptors in a binding use the same maximum
combinedImageSamplerDescriptorCount descriptors to allow
implementations to use a uniform stride for dynamic indexing of the
descriptors in the binding.
For example, consider a descriptor set layout binding with two descriptors
and immutable samplers for multi-planar formats
that have
VkSamplerYcbcrConversionImageFormatProperties::combinedImageSamplerDescriptorCount
values of 2 and 3 respectively.
There are two descriptors in the binding and the maximum
combinedImageSamplerDescriptorCount is 3, so descriptor sets with
this layout consume 6 descriptors from the descriptor pool.
To create a descriptor pool that allows allocating four descriptor sets with
this layout, descriptorCount must be at least 24.
Instead of querying all the potential formats that the application might use
in the descriptor layout, the application can use the
VkPhysicalDeviceMaintenance6Properties::maxCombinedImageSamplerDescriptorCount
property to determine the maximum descriptor size that will accommodate any
and all formats that require a
sampler Y′CBCR conversion supported by the implementation.
To determine if cubic filtering can be used with a given image format and a
given image view type add a
VkPhysicalDeviceImageViewImageFormatInfoEXT structure to the
pNext chain of the VkPhysicalDeviceImageFormatInfo2 structure,
and a VkFilterCubicImageViewImageFormatPropertiesEXT structure to the
pNext chain of the VkImageFormatProperties2 structure.
Supported Sample Counts
vkGetPhysicalDeviceImageFormatProperties returns a bitmask of
VkSampleCountFlagBits in sampleCounts specifying the supported
sample counts for the image parameters.
sampleCounts will be VK_SAMPLE_COUNT_1_BIT if at least one of
the following conditions is true:
tilingisVK_IMAGE_TILING_LINEARtypeis notVK_IMAGE_TYPE_2DflagscontainsVK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT- Neither the
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BITflag nor theVK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BITflag inVkFormatProperties::optimalTilingFeaturesreturned by vkGetPhysicalDeviceFormatProperties is set - VkPhysicalDeviceExternalImageFormatInfo::
handleTypeis an external handle type for which multisampled image support is not required. formatis one of the formats that require a sampler Y′CBCR conversionusagecontainsVK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHRusagecontainsVK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
Otherwise, the bits set in sampleCounts will be the sample counts
supported for the specified values of usage and format.
For each bit set in usage, the supported sample counts relate to the
limits in VkPhysicalDeviceLimits as follows:
- If
usageincludesVK_IMAGE_USAGE_COLOR_ATTACHMENT_BITandformatis a floating- or fixed-point color format, a superset ofVkPhysicalDeviceLimits::framebufferColorSampleCounts - If
usageincludesVK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, andformatincludes a depth component, a superset ofVkPhysicalDeviceLimits::framebufferDepthSampleCounts - If
usageincludesVK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, andformatincludes a stencil component, a superset ofVkPhysicalDeviceLimits::framebufferStencilSampleCounts - If
usageincludesVK_IMAGE_USAGE_SAMPLED_BIT, andformatincludes a color component, a superset ofVkPhysicalDeviceLimits::sampledImageColorSampleCounts - If
usageincludesVK_IMAGE_USAGE_SAMPLED_BIT, andformatincludes a depth component, a superset ofVkPhysicalDeviceLimits::sampledImageDepthSampleCounts - If
usageincludesVK_IMAGE_USAGE_SAMPLED_BIT, andformatis an integer format, a superset ofVkPhysicalDeviceLimits::sampledImageIntegerSampleCounts - If
usageincludesVK_IMAGE_USAGE_STORAGE_BIT, a superset ofVkPhysicalDeviceLimits::storageImageSampleCounts
If multiple bits are set in usage, sampleCounts will be the
intersection of the per-usage values described above.
If none of the bits described above are set in usage, then there is no
corresponding limit in VkPhysicalDeviceLimits.
In this case, sampleCounts must include at least
VK_SAMPLE_COUNT_1_BIT.
Allowed Extent Values Based on Image Type
Implementations may support extent values larger than the required minimum/maximum values for certain types of images.
VkImageFormatProperties::maxExtent for each type is subject to
the constraints below.
Implementations must support images with dimensions up to the required minimum/maximum values for all types of images. It follows that the query for additional capabilities must return extent values that are at least as large as the required values.
For VK_IMAGE_TYPE_1D:
maxExtent.width≥ VkPhysicalDeviceLimits::maxImageDimension1DmaxExtent.height= 1maxExtent.depth= 1
For VK_IMAGE_TYPE_2D when flags does not contain
VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT:
maxExtent.width≥ VkPhysicalDeviceLimits::maxImageDimension2DmaxExtent.height≥ VkPhysicalDeviceLimits::maxImageDimension2DmaxExtent.depth= 1
For VK_IMAGE_TYPE_2D when flags contains
VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT:
maxExtent.width≥ VkPhysicalDeviceLimits::maxImageDimensionCubemaxExtent.height≥ VkPhysicalDeviceLimits::maxImageDimensionCubemaxExtent.depth= 1
For VK_IMAGE_TYPE_3D:
maxExtent.width≥ VkPhysicalDeviceLimits::maxImageDimension3DmaxExtent.height≥ VkPhysicalDeviceLimits::maxImageDimension3DmaxExtent.depth≥ VkPhysicalDeviceLimits::maxImageDimension3D