VALIDATE_UNIFORM_BUFFER_LIFETIME开启后崩溃

如上描述。

Steps to Reproduce
1 UE5.5源码+Lyra示例工程的Windows包(需用debug编译模式)

2 开启VALIDATE_UNIFORM_BUFFER_LIFETIME 1

3 为了排除RHI的干扰,添加启动参数:-norhithread -rdgimmediate -execcmds=“r.RHICmdBypass 1”

崩溃堆栈:

​[Image Removed]

分析原因:SlateRHIRender.cpp line 1351. GraphBuilder析构时,会把渲染对象全部销毁。

但此UniformBuffer仍被​某ShaderBinding对象持有,导致触发断言。

通过分析,​引用发生在:SlateRHIRenderingPolicy.cpp line 1096行。

​[Image Removed]

​FSlateRenderBatchOp对象持有的PixelBindings对象没有走释放流程,导致引用泄露。

我们的需求是开启​VALIDATE_UNIFORM_BUFFER_LIFETIME宏来监控UniformBuffer在ShaderBinding层的引用计数,所以想修复这个问题。

不过目前没有特别好的思路去改这个崩溃,请问官方是否有建议。​

您好,

感谢您的报告,我们正在检查这个问题。

您好,

我们目前仍然在调查这个问题。

您好,

感谢您报告这个问题。

请问您测试 VALIDATE_UNIFORM_BUFFER_LIFETIME 时使用的版本是基于哪一个 CL的?我们发现目前将 VALIDATE_UNIFORM_BUFFER_LIFETIME 设为 1 以后,引擎是无法通过编译的。我们会为这个编译问题创建一份问题报告,稍后会附上追踪链接。请留意 VALIDATE_UNIFORM_BUFFER_LIFETIME 现在并没有被充分测试。

如果您本地做了其他改动修复这个编译问题,方便的话可以提供下这些改动吗?

关于 ShaderBinding 的引用计数问题,FSlateRenderBatchOp 是通过 GraphBuilder.AllocPOD 创建的,所以并没有调用构造/析构过程。您可以尝试一下改用 GraphBuilder.AllocObject,并给 FSlateRenderBatchOp 添加一个析构函数释放 VertexBindings 和 PixelBindings 吗?

您好,

这是 VALIDATE_UNIFORM_BUFFER_LIFETIME 编译问题的追踪链接: