实际GPU内存使用量与glDeleteXXXX相比?

时间:2017-03-23 15:41:41

标签: opengl memory graphics game-engine

GPU驱动程序是否有义务根据应用程序的需要释放GPU内存?如果没有,那是否会使应用程序可能想要执行的任何GPU内存资源管理无效,因为它是一个"层被删除"从实际的记忆?

我分配了大量纹理,然后释放它们。在分配时,我可以看到" GPU系统字节" (在Process Explorer中)迅速增加(大大超过图像硬盘空间的数量 - 可能它们在GPU中未压缩,因此需要占用大量空间)。

当释放纹理时,我可以看到Texture2D对象析构函数正确地调用了glDeleteTexture,但似乎在" GPU系统字节中出现延迟"减少到原始值,实际上,该值不会返回到原始值,它会稍微高于它。

然后如果继续这样做,我会看到GPU内存使用量逐渐增加,但是我一直在计算我的glDeleteTexture调用,并且内存似乎永远无法恢复。

我很喜欢,因为从应用程序端看起来很干净 - x已分配,x已释放 - 但我看到我的应用程序变得有点资源耗费,而不是在我的进程的内存空间中,而是GPU内存空间,正因为如此(英特尔HD 6000 GPU)。

1 个答案:

答案 0 :(得分:0)

  

GPU驱动程序是否有义务按需从应用程序中释放GPU内存?

没有。只要感觉这样,OpenGL驱动程序就会返回该内存。

  

如果没有,那是否会使应用程序可能想要执行的任何GPU内存资源管理无效,因为它是从实际内存中“删除了一层”?

这是使用基于硬件抽象的API的结果。如果你想避免“从实际内存中删除一层”,你应该使用Vulkan。