创建pso崩溃。

[Image Removed]MaterialShared.cpp 中的FMaterial::CollectPSOs 函数中

FMaterialPSOPrecacheParams Params;

Params.FeatureLevel = FeatureLevel;

Params.Material = this;//<--------------------这里是不是需要做引用计数?不然后面可能出现野指针?

Params.VertexFactoryData = VFData;

Params.PrecachePSOParams = PreCacheParams;

[Attachment Removed]

Hi,

不好意思,我没有看出来哪里出问题了,是什么东西无效了?

[Attachment Removed]

你好。我新加了一个分析的文档。麻烦帮忙看一下

[Attachment Removed]

感谢提供信息,引擎是有一些机制可以避免正在被使用的资源被提前释放的,(不过5.3的版本需要单独确认一下)目前的版本是通过GRHIResourceLifetimeRefCount来控制的。因为引擎一帧以内的resource,都在GRHIResourceLifetimeRefCount的scope里,这个值只有在渲染结束的时候才会设成0,然后才会去真正释放资源,所以可以保证前面的资源先被GPU的command使用,才会被delete,所以只要是在RGDBuilder的生命周期内,或者是用了RenderCommandPipe,应该都没问题。

5.3的版本也许有这个问题,我晚点可以再确认一下。

[Attachment Removed]

你好。有更多发现了吗?

[Attachment Removed]

Hi,

抱歉,我看了一下,GRHIResourceLifetimeRefCount是在5.3之后的版本加的(5.5才有),而且是在不公开的分支做的修改,两个版本间的差异有点大,没法简单的合入到5.3。

可以的话,建议升级引擎。

[Attachment Removed]

你好。有一个问题已经被关闭了。可以帮我看一下吗?问题地址:

[Content removed]

我担心关闭的问题不会通知到你这边。~

[Attachment Removed]

有没有办法可以快速修复一下?或者绕过去?

[Attachment Removed]

从现象上看,像是材质球被释放了,但是渲染仍然再使用,着其实不太应该发生,不知道你是否能稳定复现?如果能稳定复现,可以看一下发生的条件是什么?发生前有什么事情发生?另外如果能稳定复现,可以-game -forcerhibypass -norhithread的方式启动editor,看看是否能复现,如果可以,可以debug一下,看看当前是什么pass,绘制什么mesh,然后看看他使用的材质球是否被释放?

[Attachment Removed]