4 vulkan
我阅读了很多有关Vulkan内存管理的文章,所有这些文章都建议使用登台缓冲区传输到GPU。但是我们已经可以创建内存,该内存是设备本地的,并且主机可见,主机一致。它可以从GPU读取,也可以从CPU写入。
我认为这是合理的-创建一个大缓冲区绑定到设备本地,主机可见且一致的内存。现在,对于所有动态缓冲区,我们仅继续使用该缓冲区中的内存,并在该偏移量处绑定该缓冲区。
但是在大多数示例中,它们创建一个主机可见缓冲区和一个gpu可见缓冲区,并使用copyBuffer操作进行传输。与仅使用一个cpu和gpu都可以访问的缓冲区相比,这有什么优点?我只在谈论缓冲区,而不是纹理。
正如棘手怪癖所说,设备不需要具有本地和主机可见的内存类型。即使大多数这样做,大小也会受到限制。在过去的几年中,情况可能发生了变化,但是过去,PCI-E和BIOS的限制意味着您可能获得的最大内存为256 MB或512 MB。最后,通过PCI-E进行CPU写入将比通过CPU自己的内存写入带宽更低。因此,即使使用登台缓冲区占用的总带宽是原来的两倍,但如果可以在传输队列上异步完成,则可以最大程度地减少CPU和图形管道在该传输上花费的时间。因此,使用暂存缓冲区是否可以赢钱将取决于特定的CPU和GPU组合以及您的应用程序在做什么。
但是,在移动设备或集成GPU之类的SOC上,很少有机会使用暂存缓冲区。移动GPU不应具有受限的设备本地+主机可见的堆大小。在vulkan.gpuinfo.org上查看几个Windows集成GPU ,看起来现代的Intel集成GPU也没有这种限制,但是AMD集成GPU仍然有(我只看了几个随机样本,YMMV)。
所有这些使得很难给出明确的“总是做X”建议。就个人而言,我通常会这样做:
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |