Vulkan 队列系列

Vulkan Queue Families

如果我正确进入:

我正在尝试枚举有关单个队列系列的所有信息。首先我检查有多少队列家族可用,接下来每个队列家族有多少队列,以及家族支持多少队列标志。

知道我有支持例如队列图形标志的队列系列就足够了,或者将来我将不得不更深入地检查特定队列系列中的特定队列?

单个系列中的所有队列都具有相同的属性(相同的标志集)。所以你不必深入检查每个队列。

但是有 3 件事你需要记住。规范保证必须至少有一个支持图形和计算操作的通用队列。第二件事是不同的队列系列可能具有相同的属性(相同的标志集)。最后一件事 - 交换链呈现(将交换链图像呈现给给定表面的能力)也是一个队列家族 属性,但必须通过一组单独的查询(函数)进行检查。

or in future

这基本上就是关于版本控制和扩展的问题。

主要版本可以进行任何更改(即"uncomapatible")。因此,您可能需要在应用程序中以不同的方式做事。但是可以想象旧的主要版本仍然可以在新版本的旁边使用。

次要版本和扩展应该是 backwards-compatible(有明显的例外)。但仅限于 ABI 级别,因此不能绝对保证您的程序将使用新的 header.

进行编译

这意味着 driver 更新不应破坏您已编译的应用程序。


(值得注意的例外是):

  • *Flags 从 Vulkan 返回 可能 有未指定的位(即未在您使用已启用的扩展的版本规范中指定的位)
  • 从 Vulkan 返回的
  • enums 可能 具有未指定的值
  • 如果您主动尝试让您的应用程序崩溃,例如 if( vulkanVersion != 1.0.0 ) crash();
  • 兼容性(显然?)不适用于非纯功能性事物(即不适用于性能、瓦特、噪声或其他)
  • 如果您使用任何新内容,Vulkan 希望您了解所有内容 — 例如如果您的应用程序主要是 Vulkan 1.0,并且来自 Vulkan 1.42 的 Vulkan returns 标志以及您尚未费心学习的图形,那么您稍后在另一个命令中使用由 1.42 定义的另一个标志位,它可能会与 queue 以某种方式标记。
  • 允许任何版本不兼容地修复规范错误(或作者决定考虑的错误)
  • ?