Vulkan 层可以在运行时更改吗?

Jer*_*ov2 2 c c++ graphics runtime vulkan

所以我想做一个库,让 Vulkan 编程更容易。你可以在Github 上看到它,但不要指望很快会有什么大的 ;)。我想调用一个函数getInstanceLayerProperties来返回所有图层属性(显然)。看到这可能会更慢,我想优化它。我的想法很简单:将它存储为一个预先计算好的数组。我需要知道的是:Vulkan 层可以在运行时更改吗?例如,假设我缓存了vkEnumerateInstanceLayerProperties. 是否可以删除、添加或更改新的图层属性,以便再次调用该函数时会得到不同的结果?

小智 5

vkEnumerate*Properties 返回有关系统状态的信息,因为它在进行调用时存在。在我们编写规范时,这对我们来说似乎很明显,但我可以看出这对于 Vulkan 的新手来说可能不那么明显。

由于层是在 Vulkan 之外定义的,因此它们可以随时间变化。不太可能,但他们可以。这是这些调用可以返回 VK_INCOMPLETE 的原因之一。一个典型的用途是首先调用获取计数,为结果分配空间,然后获取数据。如果列表在这两次调用之间增长,应用程序将看到 VK_INCOMPLETE 并知道发生了一些变化。