升级到5.6.1后,客户端收集了PSO, 重新启动游戏后还会卡顿,profile发现还是编译PSO。缓存的PSO不生效。在同一个地方旋转镜头缓存PSO后,长时间不动,再次转镜头时又会编PSO卡顿
Hi,
可以先看一下文档里的说明 https://dev.epicgames.com/documentation/en\-us/unreal\-engine/manually\-creating\-bundled\-pso\-caches\-in\-unreal\-engine,如果有问题我们再沟通。[Image Removed]
抱歉, 我以为这个是IOS平台的问题。
这个trace有对应的log文件吗?从trace里看,卡顿时RenderThread里的LaunchVisibilityTasks在等待异步task的完成,而这个task所在的线程在前面有有一个PSO在编译。
这里情况是,正常PSO要么是在加载的时候被PSO PreCaching所提前编译,要么是在游戏启动的时候,以及被记录在PSO PipelineCache里而被提前编译,但是trace里是在build MeshDrawCommand的时候编译的,所以要么是Precache没有预测到这个情况(可以通过设置r.PSOPrecache.Validation 2来检查是否有missing),要么是没有提前收集到。
关于过一会PSO重新编译,主要是因为D3D12.PSO.KeepUsedPSOsInLowLevelCache的设置,默认是false,因为我们发现NV驱动的PSOCache有上限,如果超过一定数量,就会造成gpu崩溃,所以会释放掉目前用不到的PSO。