Vulkan如何将描述符集写入GPU

3
描述符本质上是指向资源的指针/引用,为了告诉设备(GPU)每个描述符指向哪些(device-local/GPU)缓冲区/内存,需要在主机端(CPU概念上)设置。程序员通常知道从主机到设备的数据传输何时完成,因为它记录在命令缓冲区中,然后提交到队列。vkUpdateDescriptorSets不是命令缓冲区命令,人们说描述符集立即更新。这实际上是如何运作的?
描述符集分配在描述符池中,就像命令缓冲池一样驻留在主机端。因此,在记录命令时,您将写入主机端内存,直到提交命令缓冲区为止。vkUpdateDescriptorSets是否以相同方式工作,即它正在写入主机端内存,然后在提交命令缓冲区时将数据传输到GPU?还是它立即进行GPU传输?对于数组形式的描述符,如果我编写描述符绑定数组元素 [1] 和 element[4091],Vulkan是否需要传输整个数组到GPU,还是会导致两个小传输?
请告诉我我的理解是否正确。编写的描述符需要写入GPU,因为这里是资源指针的位置。
1个回答

1

描述符集本质上是一个黑匣子。它们的工作方式取决于规范中的描述。除此之外,任何其他内容都属于特定实现。

它们是在GPU内存还是主机内存中?这取决于具体实现。

如果您正在使用较新的Vulkan实现中的描述符索引功能,则实现无法在调用vkUpdateDescriptorSets后批量更改描述符集。因此,该函数所做的更改必须对已添加到CB但尚未提交的任何引用描述符集的命令可见。因此,实现必须以一种能够使数据对GPU可见的方式修改数据。这也放宽了这些函数的同步要求。

如果一个描述符是一个数组,并且我写了描述符绑定数组元素[1]和元素[4091],那么Vulkan是否需要将整个数组传输到GPU,还是会产生两个小的传输?

具体实现可以自行决定。因此,您需要依靠性能分析来确定它是否是您感兴趣的平台上的性能问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接