显存/内存都足够的情况下,某些dx12的api会返回E_OUTOFMEMORY

显存/内存都足够的情况下(根据crashReporter上传的设备信息和日志推断),某些dx12的api会返回E_OUTOFMEMORY(主要是创建buffer和texture时),这个也不是必现的,但发生的数量也不少。请问是否是已知的问题?

Hi,

请问是什么版本的引擎?

我们发现D3D12的驱动有个限制,他的驻留的Command List有一个固定的内存池大小,如果超出了就会报E_OUTOFMEMORY,所以即便显存内存都有余量,也会报错。

你先试试设置r.RHICmd.ParallelTranslate.MaxCommandsPerTranslate 0,看看是否有帮助。

5.3.2

好的,可以看一下设置r.RHICmd.ParallelTranslate.MaxCommandsPerTranslate 0是否有帮助。

这个看起来是rhiCmd并行化提交才引入的指令,5.3.2还没有这个功能。能详细讲一下D3D12驱动限制的具体情况吗?网上没找到什么资料。以及如果想在5.3.2中解决这个问题的话,怎么做比较好?

Hi,

你可以试一下把r.RHICmdMinDrawsPerParallelCmdList的值设的大一点,比如1024,然后看看是否有帮助。

我的理解是跟D3D12CommandList的数量有直接关系,如果数量多,就会占用一定的内存,且这个内存是有一个固定的上限的,如果D3D12CommandList的数量超过一定值之后,就会导致崩溃。目前的方法就是尽可能减少CommandList的数量,然后看一下是否有效。