This table shows the percentage of GPUs that support any given image format for different uses, such as sampling, transferring, as a depth and stencil buffer etc. If you look at it you'll see that that many of the most common formats are supported for uses such as sampling and depth buffer usage with the percentage showing as 99% or 100%, while the support for TRANSFER_SRC and TRANSFER_DST is at 78%. I'm wondering why this is, given that pretty much any format should be able to be transferred for reading it and writing it. When uploading an image to be used as a texture don't you need the TRANSFER_DST bit to be set as a flag? Similarly does this mean that there are GPUs that support something like R8G8B8A8_UINT (100% of them apparently), but only 78% of them support transferring them? This doesn't make sense to me. Strangely where the support for TRANSFER_SRC and TRANSFER_DST shows 78% for many of them the BLIT_SRC and BLIT_DST show 100%. The tutorials I've followed show the uploading of textures using copy commands and TRANSFER_DST to copy images to the GPU, for example when copying an image from a staging buffer.
CodePudding user response:
This is purely a historical artifact. That database was created very early in Vulkan's life, and it has entries from a long time ago.
Vulkan 1.0 did not have FORMAT_FEATURE_TRANSFER_SRC/DEST
as options. If the implementation provided any usage support for a format, then images in that format could be used in transfer operations, period. The feature src/dest options were added in KHR_maintenance1 (adopted into Vulkan 1.1). The purpose of this was as follows:
Allow implementations to express support for doing just transfers and clears of image formats that they otherwise support no other format features for. This is done by adding new format feature flags
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
andVK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR
.
For backwards compatibility, the extension also requires that SRC/DST support must be provided for any format that is required to be able to be used as a sampled image.
The 22% of "GPUs" that "don't support src/dst" in that database are from GPUs that were never updated to more recent versions of Vulkan.