vulkan 扩展:谁支持哪些?

vulkan extension : which are supported by whom?

EXTKHRAMDNV 扩展名。也许还有其他一些。我知道 NV 表示 Nvidia 并且 AMD 不太可能支持它的 nv 扩展。但是 khr ones 或 ext ones 呢?他们是每个人都必须支持的吗?

有一个 website 专门用于跟踪此信息。

Maybe there are some others

lots

But what about khr ones or ext ones? Are they mandatory supported by everyone?

KHR 扩展通常是将被纳入规范的内容(例如 VK_KHR_external_memory 如何成为 1.1 中核心 Vulkan 规范的一部分)或者是可能得到广泛供应商支持的内容和硬件,但不一定是所有硬件(如 VK_KHR_swapchain)。

KHX 扩展基本上是 KHR 扩展的实验版本。它们可能会成为 KHR 扩展或被纳入规范,但它们也可能在此之前发生巨大变化。

EXT 扩展不是特定于供应商的,但它们通常针对一些不太常见的用例或更具实验性的用例。它们通常永远不会成为规范的一部分,并且它们是您在依赖之前需要检查的那种东西,并且如果它们不受支持,还需要计划回退到某些其他机制。有时 EXT 扩展可以演变为 KHR 扩展。

供应商特定扩展基本上与 EXT 扩展在同一条船上,但由特定供应商控制。它们还可以发展成为 KHR 扩展或核心规范。例如,KHR_external_memory 最初是 NV_external_memory。

Are they mandatory supported by everyone?

他们只有核心规范所说的强制性内容。

还有其他供应商代码。当前所有供应商代码都在官方 registry list.

供应商代码标记维护扩展规范的(主要)供应商。通常,允许其他人实现它(尽管通常不这样做,尤其是在扩展过于具体的情况下)。据我所知,供应商标记的扩展对包含在规范中的要求最低(我认为供应商只要不破坏其他任何东西,实际上就可以自由发挥)。

可能有一些 experimental\provisional 扩展名,即 NVX,以及 registry 中标记为 provisional="true" 的扩展名。从历史上看,它们随后会完全从规范中删除,并由最终的继任者取代。

EXT很特别。这意味着多个供应商的协作。这里有许多重要的扩展,甚至例如必不可少的 VK_EXT_debug_utils,它与我们都使用的验证层交互。在 extension appendix 中,您可以看到来自 Valve\LunarG、Google、AMD、NV、RenderDoc、Epic 和 Oxide 的人在上面签名。

KHR也很特别。它类似于 EXT。并且与 Khronos(规范组)推荐的一样好;这是一个 "ratified" 扩展。可能会有一些更严格的要求(我认为需要三个现有的实现)。正如@Jherico 所说,它们很有可能成为 Vulkan 未来版本的核心功能。

扩展在设计上是可选的。由于历史原因,只有 VK_KHR_sampler_mirror_clamp_to_edge 是强制性的。