【发布时间】:2019-08-11 20:20:00
【问题描述】:
我目前正在学习 vulkan,现在我只是分解每个命令并检查结构以尝试理解它们的含义。
现在我正在分析 QueueFamilies,我有以下代码:
vector<vk::QueueFamilyProperties> queue_families = device.getQueueFamilyProperties();
for(auto &q_family : queue_families)
{
cout << "Queue number: " + to_string(q_family.queueCount) << endl;
cout << "Queue flags: " + to_string(q_family.queueFlags) << endl;
}
这会产生这个输出:
Queue number: 16
Queue flags: {Graphics | Compute | Transfer | SparseBinding}
Queue number: 1
Queue flags: {Transfer}
Queue number: 8
Queue flags: {Compute}
所以,天真地我是这样理解的:
共有 3 个队列族,一个队列族有 16 个队列,都能够进行图形、计算、传输和稀疏绑定操作(不知道最后 2 个是什么)
另一个有 1 个队列,只能传输(不管是什么)
最后一个有 8 个能够进行计算操作的队列。
每个队列族是什么?我知道这是我们发送执行命令(如绘图和交换缓冲区)的地方,但这是一个有点宽泛的解释,我想要一个更详细的答案。
额外的 2 个标志是什么?转移和稀疏投标?
最后,为什么我们有/需要多个命令队列?
【问题讨论】:
-
解释稀疏绑定asawicki.info/… 基本上它是一种使用分页的方式,就像在 CPU 上但在 GPU 上一样,而不是一次绑定所有资源,允许您移动内存避免碎片化,而不必重新创建所有资源。