Vulkan中的扩展是否允许添加新功能?

时间:2017-01-02 05:28:44

标签: vulkan

https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#fundamentals-versionnum

  

任何Vulkan版本号的差异都表示以某种方式对API进行了更改,版本号的每个部分都表示不同的更改范围。

     

补丁版本号的差异表明规范或标题的一些通常很小的部分已经被修改,通常用于修复错误,并且可能对现有功能的行为产生影响。此版本号的差异不应影响两个版本之间的完全兼容性或向后兼容性,也不应向API添加其他接口。

     

次要版本号的差异表示已添加了一些新功能。这通常包括标头中的新接口,还可能包括行为更改和错误修复。功能可能会在次要修订中弃用,但不会被删除。引入新的次要版本时,修补程序版本将重置为0,每个次要修订版本都会维护自己的修补程序版本集。此版本的差异不应影响向后兼容性,但会影响完全兼容性。

     

主要版本号的差异表示对API进行了大量更改,可能包括新功能和标题界面,行为更改,删除已弃用的功能,修改或彻底替换任何功能,因此很可能会破坏任何和所有兼容性。此版本的差异通常需要对应用程序进行重大修改才能使其正常运行。

这对扩展意味着什么?例如Swapchain

  

依赖

     

此扩展名是针对Vulkan API的1.0版编写的。   此扩展名需要VK_KHR_surface。

这是否意味着此扩展程序将来不会添加任何功能?例如,如果Vulkan规范将其次要版本提升为1.1.0,是否允许规范向现有扩展添加新功能?

我可以假设现有扩展程序的新功能只会作为新扩展程序发布吗?

查看VkExtensionProperties

  

specVersion是此扩展程序的版本。它是一个整数,随着向后兼容的变化而增加。

如果扩展可以在将来的版本中扩展,这似乎很奇怪,因为Vulkan使用版本格式Major, Minor, Patch,扩展只使用整数。如果他们在将来的版本中添加功能,我希望扩展名会使用Minor, Patch

1 个答案:

答案 0 :(得分:3)

1)
它对扩展意味着很少,因为它(除非另有说明)是(核心)Vulkan的版本控制方案。

目前,扩展标头是核心标头的一部分,因此扩展更改(需要标头更改)意味着核心修补程序版本在该标头中发布时会出现问题。

2)
依赖主要意味着您无法启用扩展,除非您还启用了依赖项。 (它有点不明确。例如,不清楚在何种程度上重用其他扩展的结构/枚举是一种依赖。而且#34;反对&#34;意味着什么。但是NVM那......)< / p>

我认为你的暗示是不正确的,但是合理的:

只要它是向后兼容的(实际上不管核心Vulkan次要版本),应该允许添加新功能。但是我希望开发人员会有一些美学上的考虑(添加alt命令等扩展可能会变得丑陋)。

当Vulkan转换为1.1时,扩展应该能够保持有效(因为它应该向后兼容)。

核心Vulkan版本2必须发生其他事情。但我认为没有人会为此烦恼。在最坏的情况下,他们可以欺骗&#34;并指明扩展版本应该如何工作。或者更可能只是废弃所有Vk1扩展(因为它们与Vk2隐含不兼容)。

3)
有一个小版本会很好,但并不是绝对必要的 无论您是否知道X小调版本或X(仅整数)版本中是否出现所需功能,这一点都无关紧要 考虑到大多数扩展版本都是版本1,这将是一种过度的设计。

specVersion有点用词不当(可能是复制粘贴错误)。在规范的其余部分中,它被称为 revision