根据这些统计数据,为什么这么多 GPU 不支持常见图像类型的传输操作?

Why do so many GPUs not support transfer operations for common image types according to these statistics?

table 显示支持任何给定图像格式以用于不同用途(例如采样、传输、作为深度和模板缓冲区等)的 GPU 的百分比。如果您查看它,您会发现许多最常见的格式都支持使用,例如采样和深度缓冲区使用,百分比显示为 99% 或 100%,而对 TRANSFER_SRC 和 TRANSFER_DST 的支持为 78%。我想知道为什么会这样,因为几乎任何格式都应该能够传输以进行读取和写入。上传用作纹理的图像时,不需要将 TRANSFER_DST 位设置为标志吗?同样,这是否意味着有支持 R8G8B8A8_UINT 之类的 GPU(显然是 100%),但只有 78% 支持传输它们?这对我来说没有意义。奇怪的是,TRANSFER_SRC 和 TRANSFER_DST 的支持率为 78%,而 BLIT_SRC 和 BLIT_DST 的支持率为 100%。我遵循的教程展示了使用复制命令上传纹理和 TRANSFER_DST 将图像复制到 GPU,例如从暂存缓冲区复制图像时。

这纯粹是一件历史文物。该数据库是在 Vulkan 生命的早期创建的,并且包含很久以前的条目。

Vulkan 1.0 没有 FORMAT_FEATURE_TRANSFER_SRC/DEST 作为选项。如果实现为格式提供 any 使用支持,则该格式的图像可用于传输操作,期间。在 KHR_maintenance1 中添加了 src/dest 功能选项(被 Vulkan 1.1 采纳)。这样做的目的如下:

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 and VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR.

为了向后兼容,扩展还要求 SRC/DST 必须为能够用作采样图像所需的任何格式提供支持。

该数据库中“不支持 src/dst”的“GPU”中有 22% 来自从未更新到最新版本 Vulkan 的 GPU。