Vulkan Driver和Vulkan SDK如何互动?

时间:2016-03-13 18:43:27

标签: gpu vulkan

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

例如,如果驱动程序和SDK中的VK_API_VERSION不同,我有兴趣知道是否存在某种不可操作性。

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

CUDA Driver Backward but Not Forward Compatible

1 个答案:

答案 0 :(得分:7)

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不存在。