154 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						||
title: RDG Debug笔记
 | 
						||
date: 2025-06-14 15:44:47
 | 
						||
excerpt: 
 | 
						||
tags: 
 | 
						||
rating: ⭐
 | 
						||
---
 | 
						||
# 前言
 | 
						||
- [UE5 Render Dependency Graph-实用指南](https://zhuanlan.zhihu.com/p/637889120)
 | 
						||
 | 
						||
# Command
 | 
						||
- r.rdg
 | 
						||
	- AsyncCompute 
 | 
						||
	- BreakPoint
 | 
						||
 | 
						||
## Reference
 | 
						||
```c++
 | 
						||
FAutoConsoleVariableRef CVarRDGDebug(  
 | 
						||
    TEXT("r.RDG.Debug"),  
 | 
						||
    GRDGDebug,  
 | 
						||
    TEXT("Allow to output warnings for inefficiencies found during wiring and execution of the passes.\n")  
 | 
						||
    TEXT(" 0: disabled;\n")  
 | 
						||
    TEXT(" 1: emit warning once (default);\n")  
 | 
						||
    TEXT(" 2: emit warning everytime issue is detected."),  
 | 
						||
    ECVF_RenderThreadSafe);
 | 
						||
    
 | 
						||
FAutoConsoleVariableRef CVarRDGClobberResources(  
 | 
						||
    TEXT("r.RDG.ClobberResources"),  
 | 
						||
    GRDGClobberResources,  
 | 
						||
    TEXT("Clears all render targets and texture / buffer UAVs with the requested clear color at allocation time. Useful for debugging.\n")  
 | 
						||
    TEXT(" 0:off (default);\n")  
 | 
						||
    TEXT(" 1: 1000 on RGBA channels;\n")  
 | 
						||
    TEXT(" 2: NaN on RGBA channels;\n")  
 | 
						||
    TEXT(" 3: +INFINITY on RGBA channels.\n"),  
 | 
						||
    ECVF_Cheat | ECVF_RenderThreadSafe);
 | 
						||
    
 | 
						||
FAutoConsoleVariableRef CVarRDGOverlapUAVs(  
 | 
						||
    TEXT("r.RDG.OverlapUAVs"), GRDGOverlapUAVs,  
 | 
						||
    TEXT("RDG will overlap UAV work when requested; if disabled, UAV barriers are always inserted."),  
 | 
						||
    ECVF_RenderThreadSafe);
 | 
						||
    
 | 
						||
FAutoConsoleVariableRef CVarRDGTransitionLog(  
 | 
						||
    TEXT("r.RDG.TransitionLog"), GRDGTransitionLog,  
 | 
						||
    TEXT("Logs resource transitions to the console.\n")  
 | 
						||
    TEXT(" 0: disabled(default);\n")  
 | 
						||
    TEXT(">0: enabled for N frames;\n")  
 | 
						||
    TEXT("<0: enabled;\n"),  
 | 
						||
    ECVF_RenderThreadSafe);
 | 
						||
    
 | 
						||
TAutoConsoleVariable<FString> CVarRDGDebugPassFilter(  
 | 
						||
    TEXT("r.RDG.Debug.PassFilter"), TEXT(""),  
 | 
						||
    TEXT("Filters certain debug events to specific passes. Set to 'None' to reset.\n"),  
 | 
						||
    ECVF_Default);
 | 
						||
    
 | 
						||
TAutoConsoleVariable<FString> CVarRDGDebugResourceFilter(  
 | 
						||
    TEXT("r.RDG.Debug.ResourceFilter"), TEXT(""),  
 | 
						||
    TEXT("Filters certain debug events to a specific resource. Set to 'None' to reset.\n"),  
 | 
						||
    ECVF_Default);
 | 
						||
 | 
						||
FAutoConsoleVariableRef CVarRDGParallelSetup(  
 | 
						||
    TEXT("r.RDG.ParallelSetup"), GRDGParallelSetup,  
 | 
						||
    TEXT("RDG will setup passes in parallel when prompted by calls to FRDGBuilder::FlushSetupQueue.")  
 | 
						||
    TEXT(" 0: pass setup is done synchronously in AddPass;")  
 | 
						||
    TEXT(" 1: pass setup is done asynchronously (default);"),  
 | 
						||
    ECVF_RenderThreadSafe);
 | 
						||
```
 | 
						||
 | 
						||
# Visualize Texture Integration
 | 
						||
**vis**  
 | 
						||
使用vis指令,可以打印vis指令帮助信息,以及当前帧使用到的所有的资源信息
 | 
						||
 | 
						||
![[RDG_Vis.jpg|1200]]
 | 
						||
 | 
						||
**vis [RT Name]**  
 | 
						||
使用vis [RT Name]可以实时预览当前RT的内容,在调试渲染特性的时候可以很方便的Debug
 | 
						||
 | 
						||
![[RDG_Vis_RTName.jpg|800]]
 | 
						||
 | 
						||
**vis [RT Name] bump**  
 | 
						||
打印当前RT到Saved/Screenshots  
 | 
						||
  
 | 
						||
**vis off**  
 | 
						||
关闭当前帧的debug模式
 | 
						||
 | 
						||
# r.RDG.ImmediateMode
 | 
						||
将RDG设置成理解执行模式,方便进行资源绑定Debug以及断点。
 | 
						||
- RDG立即执行模式:
 | 
						||
	- 立刻执行Pass在其被添加的时候
 | 
						||
	- 产生和延后执行时一样的功能
 | 
						||
	- 如果打断点,会非常容易检查其创建的代码
 | 
						||
	- 由于这个原因,所以不能在AddPass后再去更改Pass参数
 | 
						||
	- 可以利用r.RDG.ImmediateMode在运行时切换
 | 
						||
	- 会消耗更多的内存,可以考虑使用r.Test.SecondaryUpscaleOverride运行在低分辨率下。(r.Test.SecondaryUpscaleOverride 设置的参数越大越模糊)
 | 
						||
 | 
						||
![[RDG_Immediate.png|800]]
 | 
						||
 | 
						||
- **r.RDG.ImmediateMode 1** / -rdgimmediate : 去除RDG的影响  
 | 
						||
- **r.RHICmdBypass 1** :去除RHI和并行渲染的影响
 | 
						||
- r.RDG.ParallelExecute=0
 | 
						||
- r.RDG.ParallelSetup=0
 | 
						||
 | 
						||
## RDG Async Compute
 | 
						||
1.直接设置ComputePassFlags为ERDGPassFlags::AsyncCompute,剩下的工作交给RDG自动判断和设置
 | 
						||
```c++
 | 
						||
ERDGPassFlags ComputePassFlags = (GSupportsEfficientAsyncCompute && CVarTSRAsyncCompute.GetValueOnRenderThread() != 0) ? ERDGPassFlags::AsyncCompute : ERDGPassFlags::Compute;
 | 
						||
 | 
						||
TShaderMapRef<FTSRClearPrevTexturesCS> ComputeShader(View.ShaderMap);
 | 
						||
                FComputeShaderUtils::AddPass(
 | 
						||
                        GraphBuilder,
 | 
						||
                        RDG_EVENT_NAME("TSR ClearPrevTextures %dx%d", InputRect.Width(), InputRect.Height()),
 | 
						||
                        ComputePassFlags,
 | 
						||
                        ComputeShader,
 | 
						||
                        PassParameters,
 | 
						||
                        FComputeShaderUtils::GetGroupCount(InputRect.Size(), 8 * 2));
 | 
						||
```
 | 
						||
 | 
						||
2.在Render层调整Pass顺序,为RDG提供更多Async Compute Overlap的可能性
 | 
						||
 | 
						||
# ValidateShaderParameters
 | 
						||
ValidateShaderParameters()可以检测RDG绑定的资源是否都存在。
 | 
						||
 | 
						||
# -rdgdebug
 | 
						||
`r.RDG.Debug = 1`来开启。
 | 
						||
 | 
						||
# RDG Insight
 | 
						||
开启RDG Insight Plugin之后即可在UnrealInsight看到额外添加RDG Channel。
 | 
						||
 | 
						||
命令行启动游戏:  
 | 
						||
`Game.exe -trace=rdg,defaults`
 | 
						||
 | 
						||
# DumpGPU
 | 
						||
使用DumpGPU指令可以将当前帧的所有Pass和资源信息打印,可以很方便的进行查看。  
 | 
						||
在Console中输入DumpGPU指令,会弹出生成好的html文件:  
 | 
						||
 | 
						||

 | 
						||
 | 
						||
  
 | 
						||
执行OpenGPUDumpViewer.bat打开网页,默认只支持chrome浏览器,可以通过修改脚本调用别的浏览器:
 | 
						||

 | 
						||
 | 
						||
  
 | 
						||
可以看到各个Pass的信息:  
 | 
						||
 | 
						||

 | 
						||
 | 
						||
  
 | 
						||
显示当前帧所有CVar的值:  
 | 
						||
 | 
						||

 | 
						||
 | 
						||
  
 | 
						||
比较像素的值:  
 | 
						||
 | 
						||
 |