我想知道Vulkan驱动程序是如何与SDK交互的。
例如,我想知道如果驱动程序和SDK中的VK_API_VERSION不同,是否存在某种不可移植性。
例如,在CUDA中,较新的CUDA驱动程序保持向后兼容,但它们不与新的CUDA版本向前兼容。有人知道这是否也发生在Vulkan吗?

发布于 2016-03-13 19:14:37
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位于您和实现之间。它可以在上面添加规则。
但是,从文件中,我没有看到任何证据表明加载程序试图阻止从以前的API版本加载加载器版本的较高的次要API版本。因此,看起来SDK加载程序遵循Vulkan规范。如果加载程序是为Vulkan 1.1构建的,那么它应该适用于任何2.0以下的Vulkan实现。此时,加载程序可能无法工作,因为它所依赖的API不存在。
https://stackoverflow.com/questions/35974236
复制相似问题