Metal RHI Context Refactor · EpicGames/UnrealEngine@056d57f
自从这个MetalRHI重构change之后,一帧中使用的CommandBuffer数量非常多,导致Metal CommandBuffer和CommandEncoder的内存占用比低版本的引擎高很多(低版本引擎一帧只会使用两个CommandBuffer)。
根据apple的Metal Best Practices Guide: Command Buffers,每一帧应该提交尽可能少的CommandBuffer。
请问应该如何修改来优化一帧中的CommandBuffer数量呢?
重现步骤
iOS平台,使用UE5.5及以后的版本,默认场景,MetalCapture抓一帧即可看到CommandBuffers数量。
[Image Removed]
内存的话,可以通过Allocations或者MemoryGraph抓取验证。
[Image Removed]
Liu.Wei
(Liu.Wei)
3
Hi,
你好,抱歉回复的很晚,我在国庆前测试过,的确有你说的问题,主要原因是在渲染阶段有多次的buffer提交(也跟UploadContext有关),我暂时没有看到什么现成的cvar可以控制,我也在跟开发的同事讨论,看看有什么好的办法优化。我猜测应该是想办法保证在渲染阶段,只有1到2次的gpu submit,等后续有结论了,我再给你更新。
Liu.Wei
(Liu.Wei)
4
我把问题已经反馈给开发的同学了,我估计下周还会继续讨论解决方案,如果后续有反馈,我再给你回复。希望能够针对IOS,减少commandbuffer的数量。
Liu.Wei
(Liu.Wei)
6
Hi,
上次跟开发的同事交流过后,他做了一些改动,并测试了一下,他的改动是有减少commandbuffer的数量,不过暂时还没有提交,我问一下情况,后续有进展,我再这里回复。
Liu.Wei
(Liu.Wei)
7