有没有官方开发人员交流下,binggroup 内存占用问题webgpu如何解决?
-
bindgroup 与当前绑定的资源息息相关,在开发过程中,我发现如果频繁的分配和删除 bindgroup , webgpu 实现并不能很好的回收内存或根本不回收内存,这造成内存占用会越来越大,即使一开始分配大量的 bindgroup , 再删除掉,我发现webgpu也没有回收内存。这对于小场景的测试看不出问题,但当场景规模一大,对象一多,很快的就暴露了问题。 控制台 会报 描述符分配 out of memory 了。请问有没有好的解决方案, 去控制bindgroup 的分配或回收。 资源回收 , webgpu 官方应该是考虑到一些问题, 在 device , texture , buffer ,query 上都提供了 destroy 方法, 唯独这个资源描述符, 并没有提供相关的机制去控制。
-
@goodga 现代图形学API (dx12/metal/vulkan) 本身设计就不希望去频繁的创建/修改
bindGroup
,而应该充分复用bindGroup
,不能按传统 openGL / webGL 的逻辑去设计创建 bindgroup 本身就非常消耗性能,这个跟 WebGL 的使用方法区别很大,也是 dx12/metal/vulkan/webgpu 和 opengl/webgl 最大区别之一。 就是希望GPU不要频繁操作显存和指针的绑定状态。
所以这个问题的正解是,不要让程序去创建大量
bindgroup
,即使有对应手动销毁的 API,本身性能也会非常慢,还是要想办法尽可能复用绑定关系,可以频繁覆写资源和显存,但不要频繁切换绑定状态