如上描述。
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 编译问题的追踪链接: