2.3 KiB
2.3 KiB
title, date, excerpt, tags, rating
title | date | excerpt | tags | rating |
---|---|---|---|---|
UE的多线程渲染 | 2022-11-23 16:55:20 | Rendering | ⭐⭐ |
并行渲染
因为一些平台的RHI指令需要等待驱动层返回才能继续执行,所以会使用分离RHI线程的方式来解决。
RHI
同时渲染线程会将这些RHI命令都打包在一起,以链表的方式发送到RHI线程进行处理。其中FRHICommandListImmediate(单例,只存在一个)只存放立即执行的RHI命令,比如LockTextre2D子类的。
多线程翻译RHI指令
- IRHIComputeContext:只有一些ComputeShader相关逻辑。
- IRHICommandContext(继承自IRHIComputeContext):其他更多GPU指令。
Command会以链表的方式被构建成CommandBuffer之后加入驱动层的Queue中。
线程同步
- 前端使用了TaskGraph System来同步,主要通过设置Task与Task之间的条件来实现的。
- 后端使用Barrier、Fence、Semaphore等方法。
MeshDrawCommand的并行过程
RDG并行渲染
并行渲染Debug
- ByPass
- r.RHICmdBypass
-
- forcerhibypass
- GRHISupportsRHIThread
- console variables =>r.metal.IOSRHIThread r.OpenGL.AllowRHIThread r.vulkan.RHIThread
- -rhithread -norhithread
- GRHISupportsParallelRHIExecute
- r.Vulkan.RHIThread >1