从计算着色器中的主机内存读取以保存副本有意义吗



此答案建议使用计算着色器在GPU上将压缩的3通道图像数据转换为4通道纹理。与其在解码之前将3通道图像复制到GPU,不如将其写入主机可见缓冲区,然后直接在计算着色器中读取,这是个好主意吗?

它会在GPU上节省一个缓冲区,但我不知道CPU-GPU缓冲区复制是否以某种巧妙的方式完成,这会失败。

好吧,您需要问的第一个问题是Vulkan实现是否允许CS直接从主机可见内存中读取。Vulkan实现必须允许您在某些内存类型中创建SSBO,但它不一定是主机可见的。

因此,即使你想做到这一点,你也需要提供一个代码路径,说明当你不能(或者只是在这种实现的早期失败(时会发生什么。

下一个问题是,您可以将SSBO放入的主机可见内存类型是否也是设备本地的。只有一个内存池的集成GPU既是主机可见的,也是设备本地的,所以对它们进行复制是没有意义的(而且它们显然不能拒绝让你在其中创建SSBO(。

但是许多/大多数离散GPU具有主机可见和设备本地的内存类型。无论这些卡的实际GPU内存有多少,它们的大小通常在256MB左右,并且它们旨在用于每帧都会变化的流式数据。当然,GPU不一定要允许您将它们用于SSBO。

你应该使用这样的内存类型来处理这些图像吗?你必须对他们进行简介才能知道。您还必须考虑您的应用程序是否有方法隐藏任何DMA上传延迟,这将允许您忽略将数据传输到非主机可见内存的成本。

最新更新