如何避免VRAM碎片化



我意识到,对于某些,没有办法避免它,因为OpenGL对VRAM碎片化只字未提。

但尽管如此,我的应用程序中存在碎片,我想尝试在通用平台上减少碎片。

我在这个话题上唯一发现的是:

防止内存碎片过多的最佳方法是尝试并限制项目中不同分辨率的数量。当一个资产被换成具有相同分辨率的资产时,通常情况下它可以在内存中占据它的位置。

这很有道理。

这真的是个好主意吗?这件事还有其他需要记住的吗?

请注意,在我的用例中,几乎所有的VRAM使用都由纹理(以及后/前/深度缓冲区)组成。几乎没有缓冲区对象之类的。

基本上你是对的。在所有的资源中纹理是重的一个。不仅可以将纹理用作缓冲区,还可以将其用作普通图像。另外,您可以拥有相同纹理的多个分辨率。你必须记住,在驱动程序方面,有一些特定的标准可以使资源加载到GPU ram或卸载。所以,如果你有相同分辨率的纹理。即使其中一个被卸载,它的内存块也可以被分配给另一个,而不会有任何碎片。此外,当你创建纹理或任何资源时,你不能确定内存是否存在于GPU内存中。它可以是基于驱动程序实现的任何位置。此外,在资源驱动程序的生存期内,可能会将资源从一个内存移动到另一个内存。除此之外,至少在OpenGL中,您无法控制不同的内存以及它们的分配方式。因此,在这种情况下,当您需要更多控制时,Vulkan是首选,并且您知道自己在做什么,因为您不仅可以指定所需的内存类型,还可以为该内存指定自己的分配器。

相关内容

  • 没有找到相关文章

最新更新