Vulkan 队列系列
Vulkan Queue Families
如果我正确进入:
- queueFamily 是一组队列
- 队列可以有多个队列标志
- 有 4 种类型的队列标志(图形、计算、传输和稀疏绑定)
我正在尝试枚举有关单个队列系列的所有信息。首先我检查有多少队列家族可用,接下来每个队列家族有多少队列,以及家族支持多少队列标志。
知道我有支持例如队列图形标志的队列系列就足够了,或者将来我将不得不更深入地检查特定队列系列中的特定队列?
单个系列中的所有队列都具有相同的属性(相同的标志集)。所以你不必深入检查每个队列。
但是有 3 件事你需要记住。规范保证必须至少有一个支持图形和计算操作的通用队列。第二件事是不同的队列系列可能具有相同的属性(相同的标志集)。最后一件事 - 交换链呈现(将交换链图像呈现给给定表面的能力)也是一个队列家族 属性,但必须通过一组单独的查询(函数)进行检查。
or in future
这基本上就是关于版本控制和扩展的问题。
主要版本可以进行任何更改(即"uncomapatible")。因此,您可能需要在应用程序中以不同的方式做事。但是可以想象旧的主要版本仍然可以在新版本的旁边使用。
次要版本和扩展应该是 backwards-compatible(有明显的例外)。但仅限于 ABI 级别,因此不能绝对保证您的程序将使用新的 header.
进行编译
这意味着 driver 更新不应破坏您已编译的应用程序。
(值得注意的例外是):
*Flags
从 Vulkan 返回 可能 有未指定的位(即未在您使用已启用的扩展的版本规范中指定的位)
从 Vulkan 返回的 enum
s 可能 具有未指定的值
- 如果您主动尝试让您的应用程序崩溃,例如
if( vulkanVersion != 1.0.0 ) crash();
- 兼容性(显然?)不适用于非纯功能性事物(即不适用于性能、瓦特、噪声或其他)
- 如果您使用任何新内容,Vulkan 希望您了解所有内容 — 例如如果您的应用程序主要是 Vulkan 1.0,并且来自 Vulkan 1.42 的 Vulkan returns 标志以及您尚未费心学习的图形,那么您稍后在另一个命令中使用由 1.42 定义的另一个标志位,它可能会与 queue 以某种方式标记。
- 允许任何版本不兼容地修复规范错误(或作者决定考虑的错误)
- ?
如果我正确进入:
- queueFamily 是一组队列
- 队列可以有多个队列标志
- 有 4 种类型的队列标志(图形、计算、传输和稀疏绑定)
我正在尝试枚举有关单个队列系列的所有信息。首先我检查有多少队列家族可用,接下来每个队列家族有多少队列,以及家族支持多少队列标志。
知道我有支持例如队列图形标志的队列系列就足够了,或者将来我将不得不更深入地检查特定队列系列中的特定队列?
单个系列中的所有队列都具有相同的属性(相同的标志集)。所以你不必深入检查每个队列。
但是有 3 件事你需要记住。规范保证必须至少有一个支持图形和计算操作的通用队列。第二件事是不同的队列系列可能具有相同的属性(相同的标志集)。最后一件事 - 交换链呈现(将交换链图像呈现给给定表面的能力)也是一个队列家族 属性,但必须通过一组单独的查询(函数)进行检查。
or in future
这基本上就是关于版本控制和扩展的问题。
主要版本可以进行任何更改(即"uncomapatible")。因此,您可能需要在应用程序中以不同的方式做事。但是可以想象旧的主要版本仍然可以在新版本的旁边使用。
次要版本和扩展应该是 backwards-compatible(有明显的例外)。但仅限于 ABI 级别,因此不能绝对保证您的程序将使用新的 header.
进行编译这意味着 driver 更新不应破坏您已编译的应用程序。
(值得注意的例外是):
*Flags
从 Vulkan 返回 可能 有未指定的位(即未在您使用已启用的扩展的版本规范中指定的位)
从 Vulkan 返回的 enum
s 可能 具有未指定的值- 如果您主动尝试让您的应用程序崩溃,例如
if( vulkanVersion != 1.0.0 ) crash();
- 兼容性(显然?)不适用于非纯功能性事物(即不适用于性能、瓦特、噪声或其他)
- 如果您使用任何新内容,Vulkan 希望您了解所有内容 — 例如如果您的应用程序主要是 Vulkan 1.0,并且来自 Vulkan 1.42 的 Vulkan returns 标志以及您尚未费心学习的图形,那么您稍后在另一个命令中使用由 1.42 定义的另一个标志位,它可能会与 queue 以某种方式标记。
- 允许任何版本不兼容地修复规范错误(或作者决定考虑的错误)
- ?