vulkan 队列系列之间的区别
Difference between vulkan queue families
我是 vulkan 的新手,正在使用 api。我有一个打印队列系列的功能,目前我有两个:
一个支持graphics/transfer/compute,最多16个队列,
一个支持 sparse/transfer,最多 2 个队列。
假设我想创建两个队列,一个用于图形,一个仅用于传输。我的理解是,只要我只使用传输操作,从第一个系列创建的传输队列实际上与从第二个系列创建的传输队列相同。 AKA,只要我不使用稀疏内存操作,我几乎可以忽略第二个家庭。
这个理解正确吗,还是我漏掉了什么。有什么理由让我更愿意从不同的系列制作我的图形和传输队列吗?
队列族的属性包括minImageTransferGranularity
。这是对可以使用此队列系列复制的图像数据的 XYZ 区域的限制。因此,如果此值为 8x8x8,则对于该队列上的所有图像复制操作,像素矩形副本的位置和大小必须在 8 像素边界上对齐。
所以不,您不能假设始终可以使用仅传输队列系列来代替功能更强大的队列。你总是要检查。
同时,专用传输队列系列往往代表专门用于执行传输操作的专用硬件。所以他们可能使用比其他队列上的传输操作更有效的数据路径。
一般来说,如果一个硬件提供了一个队列,只有进行传输工作,而你正在做足够多的传输工作,你正在考虑使用专用队列它,您应该使用 that 队列系列来进行传输工作(只要粒度适合您)。
我是 vulkan 的新手,正在使用 api。我有一个打印队列系列的功能,目前我有两个:
一个支持graphics/transfer/compute,最多16个队列, 一个支持 sparse/transfer,最多 2 个队列。
假设我想创建两个队列,一个用于图形,一个仅用于传输。我的理解是,只要我只使用传输操作,从第一个系列创建的传输队列实际上与从第二个系列创建的传输队列相同。 AKA,只要我不使用稀疏内存操作,我几乎可以忽略第二个家庭。
这个理解正确吗,还是我漏掉了什么。有什么理由让我更愿意从不同的系列制作我的图形和传输队列吗?
队列族的属性包括minImageTransferGranularity
。这是对可以使用此队列系列复制的图像数据的 XYZ 区域的限制。因此,如果此值为 8x8x8,则对于该队列上的所有图像复制操作,像素矩形副本的位置和大小必须在 8 像素边界上对齐。
所以不,您不能假设始终可以使用仅传输队列系列来代替功能更强大的队列。你总是要检查。
同时,专用传输队列系列往往代表专门用于执行传输操作的专用硬件。所以他们可能使用比其他队列上的传输操作更有效的数据路径。
一般来说,如果一个硬件提供了一个队列,只有进行传输工作,而你正在做足够多的传输工作,你正在考虑使用专用队列它,您应该使用 that 队列系列来进行传输工作(只要粒度适合您)。