vault backup: 2024-02-05 17:20:01

This commit is contained in:
BlueRose 2024-02-05 17:20:01 +08:00
parent f5c721b660
commit fef32e0939
2 changed files with 115 additions and 0 deletions

View File

@ -78,6 +78,46 @@
"lastUpdated": 1707040198653
}
}
},
"FRDGViewableResource、FRDGTexture、FRDGTextureSRV、FRDGTextureUAV": {
"FRDGViewableResource、FRDGTexture、FRDGTextureSRV、FRDGTextureUAV": {
"currentFile": {
"count": 1,
"lastUpdated": 1707118005164
}
}
},
"FRDGViewableResource、FRDGTexture、FRDGTextureSRV、": {
"FRDGViewableResource、FRDGTexture、FRDGTextureSRV、": {
"currentFile": {
"count": 1,
"lastUpdated": 1707118021634
}
}
},
"FRDGView": {
"FRDGView": {
"currentFile": {
"count": 1,
"lastUpdated": 1707118039401
}
}
},
"FRDGViewableResource、FRDGTexture": {
"FRDGViewableResource、FRDGTexture": {
"currentFile": {
"count": 1,
"lastUpdated": 1707118633071
}
}
},
"RDG对象注册表": {
"RDG对象注册表": {
"currentFile": {
"count": 1,
"lastUpdated": 1707121888833
}
}
}
}
}

View File

@ -8,6 +8,40 @@ rating: ⭐
# 前言
https://www.cnblogs.com/timlly/p/15217090.html
# 概念
- FRDGAllocator简单的C++对象分配器, 用MemStack分配器追踪和销毁物体。
- FComputeShaderUtils
- Dispatch()派发ComputeShader到RHI命令列表携带其参数。
- DispatchIndirect()派发非直接的ComputeShader到RHI命令列表,,携带其参数。
- AddPass():派发计算着色器到**RenderGraphBuilder** 携带其参数。
- ClearUAV()清理UAV。
- AddCopyTexturePass()增加拷贝纹理Pass。
- AddCopyToResolveTargetPass()增加拷贝到解析目标的Pass。
- AddEnqueueCopyPass()增加回读纹理的Pass。
- AddPass()无参数的Pass增加。
- AddBeginUAVOverlapPass()/AddEndUAVOverlapPass() 其它特殊Pass。
- FRDGResourceRDG资源并不是直接用RHI资源而是包裹了RHI资源引用然后针对不同类型的资源各自封装且增加了额外的信息。
- FRDGUniformBuffer、TRDGUniformBuffer
- FRDGParentResource一种由图跟踪分配生命周期的渲染图资源。可能有引用它的子资源(例如视图)
- FRDGView
- FRDGBuffer、FRDGBufferSRV、FRDGBufferUAV
- FRDGViewableResource一种由图跟踪分配生命周期的RPGResource。可能有引用它的子资源
- FRDGTexture
- FRDGView
- FRDGUnorderedAccessView、FRDGTextureUAV
- FRDGShaderResourceView、FRDGTextureSRV
- FRDGTextureDesc创建渲染纹理的描述信息。
- FRDGPooledTexture贴图池里的贴图资源。
- FRDGPooledBuffer池化的缓冲区。
- FRHITransition用于表示RHI中挂起的资源转换的**不透明表面材质**数据结构。
- FRDGBarrierBatchRDG屏障批。
- FRDGBarrierBatchBegin
- FRDGBarrierBatchEnd
- FRDGPass
- TRDGLambdaPass
- FRDGSentinelPass哨兵Pass用于开始/结束。
- [[#FRDGBuilder]]
## RDG基础类型
```c++
enum class ERDGBuilderFlags
@ -215,3 +249,44 @@ inline int32 GetResourceTransitionPlaneForMetadataAccess(ERDGTextureMetaDataAcce
}
}
```
## FRDGBuilder
FRDGBuilder是RDG体系的心脏和发动机也是个大管家负责收集渲染Pass和参数编译Pass、数据处理资源依赖裁剪和优化各类数据还有提供执行接口。
重要函数:
- FindExternalTexture():查找外部纹理, 若找不到返回null.
- RegisterExternalTexture()注册外部池内RT到RDG, 以便RDG追踪之. 池内RT可能包含两种RHI纹理: MSAA和非MSAA。
- RegisterExternalBuffer()注册外部缓冲区到RDG, 以便RDG追踪之.
- 资源创建接口:
- CreateTexture()
- CreateBuffer()
- CreateUAV()
- CreateSRV()
- CreateUniformBuffer()
- 分配内存, 内存由RDG管理生命周期。
- Alloc()
- AllocPOD()
- AllocObject()
- AllocParameters()
- AddPass()
- FRDGPassRef AddPass(FRDGEventName&& Name, const ParameterStructType* ParameterStruct, ERDGPassFlags Flags, ExecuteLambdaType&& ExecuteLambda); 增加有参数的LambdaPass。
- FRDGPassRef AddPass(FRDGEventName&& Name, const FShaderParametersMetadata* ParametersMetadata, const void* ParameterStruct, ERDGPassFlags Flags, ExecuteLambdaType&& ExecuteLambda); 增加带有实时生成结构体的LambdaPass
- FRDGPassRef AddPass(FRDGEventName&& Name, ERDGPassFlags Flags, ExecuteLambdaType&& ExecuteLambda);增加没有参数的LambdaPass
- QueueTextureExtraction()在Builder执行末期, 提取池内纹理到指定的指针. 对于RDG创建的资源, 这将延长GPU资源的生命周期直到执行指针被填充. 如果指定纹理将转换为AccessFinal状态, 否则将转换为kDefaultAccessFinal状态。
- QueueBufferExtraction()在Builder执行末期, 提取缓冲区到指定的指针。
- PreallocateTexture()/PreallocateBuffer():预分配资源. 只对RDG创建的资源, 会强制立即分配底层池内资源, 有效地将其推广到外部资源. 这将增加内存压力但允许使用GetPooled{Texture, Buffer}查询池中的资源. 主要用于增量地将代码移植到RDG.
- GetPooledTexture()/GetPooledBuffer():立即获取底层资源, 只允许用于注册或预分配的资源。
- SetTextureAccessFinal()/SetBufferAccessFinal():设置执行之后的状态。
- 变量
- RDG对象注册表
- FRDGPassRegistry Passes;
- FRDGTextureRegistry Textures;
- FRDGBufferRegistry Buffers;
- FRDGViewRegistry Views;
- FRDGUniformBufferRegistry UniformBuffers;
### FRDGBuilder::Compile
RDG编译期间的逻辑非常复杂步骤繁多先后经历构建生产者和消费者的依赖关系确定Pass的裁剪等各类标记调整资源的生命周期裁剪Pass处理Pass的资源转换和屏障处理异步计算Pass的依赖和引用关系查找并建立分叉和合并Pass节点合并所有具体相同渲染目标的光栅化Pass等步骤。
# RDG开发