目前我正在分析队列族(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个队列,都能进行图形、计算、传输和稀疏绑定操作(不知道最后两个是什么)
另一个队列族有1个队列,只能进行传输操作(不管那是什么)
最后一个队列族有8个队列,能进行计算操作。
每个队列族都是什么?我知道它是我们发送执行命令(如绘制和交换缓冲区)的地方,但这只是一个相对宽泛的解释,我希望能得到更加专业和详细的答案。
这两个额外的标志是什么?传输和稀疏绑定?
最后,为什么我们需要多个命令队列?我们有什么需求?