【问题标题】:How Vulkan Driver and Vulkan SDK interact?Vulkan Driver 和 Vulkan SDK 如何交互?
【发布时间】:2016-06-28 16:56:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: gpu vulkan


    【解决方案1】:

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

    Z 是“补丁”编号,主要代表规范的编辑或次要行为更改。不允许任何面向用户的 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 代表主要版本号。如果情况发生变化,所有赌注都将关闭。可以删除、修改、更改验证规则等 API。因此,如果您使用 1.3 版的 SDK 加载器,并且 2.0 版发布,则不能保证 1.3 加载器会加载它。最重要的是,即使它确实似乎加载正确,你也不应该永远使用它。

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


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

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

    【讨论】:

    • 谢谢。因此,如果我有一个与 1.0.4 兼容的实现(nvidia 驱动程序)和一个与 1.0.5 兼容的 SDK,这应该可以工作吗? (我尝试编译一些示例但没有成功)
    • @Hopobcn:加载器在运行时动态加载实现函数指针。 NVIDIA 的驱动程序不可能导致编译 失败。所以你遇到的任何问题都与 NVIDIA 的驱动程序无关。
    • 是的,我的意思是我遇到了运行时错误。问题是我试图从 SDK (1.0.5) 链接到 libvulkan.so 并且应用程序正常工作。但是没有链接到 nvidia libvulkan.so (1.0.5)。这就是为什么我要问这个 API 兼容性问题。还是谢谢。
    猜你喜欢
    • 2019-04-03
    • 2023-01-13
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2019-04-06
    • 1970-01-01
    相关资源
    最近更新 更多