Vulkan Driver 和 Vulkan SDK 如何交互?

How Vulkan Driver and Vulkan SDK interact?

我想知道 Vulkan 驱动程序如何与 SDK 交互。

例如,如果 VK_API_VERSION 在驱动程序和 SDK 中不同,我想知道是否存在某种不兼容问题。

例如,在 CUDA 中,较新的 CUDA 驱动程序保持向后兼容性,但它们与较新的 CUDA 版本不向前兼容。有人知道这是否也发生在 Vulkan 中吗?

Vulkan 的兼容性在 Vulkan 规范中列出,它基于版本号:X.Y.Z。

Z 是 "patch" 数字,主要代表对规范的编辑或次要行为更改。不允许根据补丁号更改面向用户的 API。可以与 X.Y.(Z-1) 一起工作的代码必须与 X.Y.Z 一起工作,反之亦然。因此,如果 SDK 可以加载 Vulkan 版本 X.Y,它可以为该版本中的每个 Z 加载它。

Y是次版本号,代表对API的向后兼容更改。也就是说,如果您的代码适用于 X.(Y-1),它也适用于 X.Y。然而,反过来不一定成立。因此,如果您使用的是专为 1.0 版设计的 SDK 加载程序,则对于 1.1 版及更高版本,它应该是 功能

显然,如果您使用 1.0 加载器,您将无法使用 1.1+ 中添加的新 API。

X代表主版本号。如果这种情况发生变化,所有赌注都会取消。 APIs 可以删除、修改、更改验证规则等。因此,如果您使用 1.3 版的 SDK 加载程序,而 2.0 版发布,则无法保证 1.3 加载程序会加载它。最重要的是,即使它确实 看起来加载正确,你也应该永远不要 使用它。

针对一个主要版本的 Vulkan 编写的应用程序不应期望在不同的主要版本上运行。


以上内容解释了 Vulkan 规范与用户之间的合同,无论用户是谁。如果您使用的是 SDK,则 SDK 位于您和实施之间。它可以在上面添加规则。

但是,from the documentation,我没有看到任何证据表明加载程序试图阻止从以前的 API 版本的加载程序版本加载更高的次要 API 版本。因此,SDK 加载程序似乎遵循 Vulkan 规范。如果加载器是为 Vulkan 1.1 构建的,那么它应该适用于任何 Vulkan 2.0 之前的实现。此时加载程序可能无法工作,因为它所依赖的 API 不存在。