如何避免VRAM碎片化?

时间:2018-12-20 10:38:15

标签: opengl memory-fragmentation

我意识到无法避免一定,因为OpenGL并没有说明VRAM碎片。

但同样,我的应用程序中有碎片,我想尝试在常见平台上减少碎片。

我在该主题上发现的唯一东西是this

  

防止大量内存碎片的最佳方法是尝试限制项目中不同分辨率的数量。将资产换成相同分辨率的资产时,通常可以将其放在内存中。

这很有道理。

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

请注意,在我的用例中,实际上我所有的VRAM使用都包括纹理(以及后/前/深度缓冲区)。几乎没有缓冲对象之类的东西。

1 个答案:

答案 0 :(得分:0)

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