关闭InlineRT后SBT的提交似乎只会与Graphics Pipe同步,无法与AsyncCompute进行同步。
[Image Removed]
SBT的同步依赖了InlineRT在RDG层面的Buffer。
关闭InlineRT后的PIX
copyqueue signal[Image Removed]
Graphics Queue wait
[Image Removed]
asynccompute queue wait
[Image Removed]
---------
lumen开启inline
graphics pipe
[Image Removed]
asynccompute (offscreenscene没读scenemetadata,所以在Radiosity做的同步)[Image Removed]
-----------
以上是最新main分支截帧的结果。
我们的问题是部分合入了光追的一些升级(eg: persistent sbt),但是inline RT暂时未合入,且短期内无合入计划。
想请教下除了伪装一个dummybuffer放到setshaderbindings和async的pass上,使得fence能正常生成外还有什么比较好的解决方式吗?
目前遇到了一些gpucrash挂在sbt copy的同时开始了shadow的trace
[Image Removed]
[Image Removed]
重现步骤
ProjectSetting:Hardware Ray Tracing Mode-> Full
r.Lumen.HardwareRayTracing.Inline 0
FirstPerson示例工程,DX12后端
Liu.Wei
(Liu.Wei)
3
Hi,
你好,为避免我理解错误,复现步骤里的意思是,使用5.6引擎创建一个FirstPerson工程,设置 r.Lumen.HardwareRayTracing.LightingMode 1, r.Lumen.HardwareRayTracing.Inline 0,然后就会有gpu崩溃吗?
不会必现gpu崩溃。。
发现似乎是关闭Lumen的inlineraytracing后,SBT的上传和AsyncCompute部分的同步可能会有点问题,导致概率出现gpu崩溃。
SBT Copy跟GraphicsPipe有一次同步,但是AsyncCompute只会跟BuildRaytracingScene同步,可能会导致AsyncCompute里的Full Raytracing在SBT上传的同时发起。
InlineRayTracing由于有RayTraceMetaData,所以可以在RDG层面处理好同步。
传了一份PIX,可以关注下Obj #243, #1347
Liu.Wei
(Liu.Wei)
8
好的,我是想先从上层上理解一下,你说的问题是出在哪里。能否描述一下是哪个AsyncCompute pass用到了SBT,但是因为没有添加正确的Barrier,导致出现了asynccompute里访问到了无效数据的情况(如果我理解有问题,麻烦指正)?
哦哦。。 不好意思。。如果我没理解错误的话,
这个PIX里的AsyncComputePass是LumenSceneLighting->offscreenshadows->LumenDirectLightingHardwareRayTracingRGS这个Pass,用到的是LumenSBT (Scene->RayTracingSBT.GetPersistentSBT(Scene->LumenRayTracingSBTID)
),FullRT的SBT在RDG层面没有对应RDGBuffer,所以会在DX12层给GraphicsPipe手动加Fence
见D3D12Raytracing.cpp (
// Use copy queue for uploading the data
Context.BatchedSyncPoints.ToWait.Emplace(Buffer->UploadResourceDataViaCopyQueue(Context, &Data))
切换至InlineRT模式后,会使用InlineRayTracingBindingDataBuffer作为RayTracingSceneMetadata进行绑定,InlineRayTracingBindingDataBuffer在RDG层面是由对应Buffer的,所以可以正常解析出Barrier的放置时机。
Liu.Wei
(Liu.Wei)
10
Hi,
感谢,我明白你的意思了,SBT commit的Context是Graphic的Pipeline,而LumenDirectLightingHardwareRayTracingRGS应该是AsyncCompute的Pipeline,所以SBT commit里的Context.BatchedSyncPoints.ToWait并不能保证LumenDirectLightingHardwareRayTracingRGS执行时,CopyQueue已经执行完了。
我跟开发的同学讨论一下,后续给你回复。
Liu.Wei
(Liu.Wei)
12
Hi,
我已经提了一个Jira UE-351043,同事已经知道问题,并基本有思路如何修复,你可以在issues.unrealengine.com上关注这个问题(可能要过几天之后才能看到)。