r.RDG.Validation
r.RDG.Validation
#Overview
name: r.RDG.Validation
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Enables validation of correctness in API calls and pass parameter dependencies.\n 0: disabled;\n 1: enabled (default);\n
It is referenced in 58
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of r.RDG.Validation
is to enable validation of correctness in API calls and pass parameter dependencies within the Render Dependency Graph (RDG) system of Unreal Engine 5. This setting variable is primarily used for debugging and ensuring the proper usage of the RDG system.
Key points about r.RDG.Validation
:
-
It is used by the Render Core subsystem, specifically within the RDG implementation.
-
The value is set through a console variable, allowing it to be changed at runtime. By default, it is enabled (value of 1).
-
It is associated with the
GRDGValidation
variable, which is used throughout the code to conditionally execute validation checks. -
When enabled, it performs various checks such as:
- Validating resource creation and usage
- Checking for proper pass creation and execution
- Ensuring correct access patterns for resources
- Detecting unused or improperly used resources
-
Developers should be aware that enabling this variable may have a performance impact, as it adds additional checks throughout the RDG system.
-
Best practices when using this variable:
- Keep it enabled during development and testing to catch potential issues early
- Disable it in shipping builds for optimal performance
- Use it in conjunction with other RDG debug variables for comprehensive debugging
The associated variable GRDGValidation
is an integer that directly reflects the value of r.RDG.Validation
. It is used throughout the RDG implementation to conditionally execute validation code. When GRDGValidation
is non-zero, various validation checks are performed to ensure the correct usage of the RDG system.
Developers should be aware that GRDGValidation
is used extensively in conditional statements throughout the RDG code. When it is enabled, it adds additional overhead to RDG operations, which may impact performance. However, it provides valuable debugging information and helps catch potential issues in RDG usage.
Best practices for using GRDGValidation
:
- Use it during development and testing phases to catch RDG-related issues early.
- Consider disabling it in performance-critical scenarios or shipping builds.
- When debugging RDG-related issues, enable this variable along with other RDG debug options for comprehensive diagnostics.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphPrivate.cpp:19
Scope: file
Source code excerpt:
int32 GRDGValidation = 1;
FAutoConsoleVariableRef CVarRDGValidation(
TEXT("r.RDG.Validation"),
GRDGValidation,
TEXT("Enables validation of correctness in API calls and pass parameter dependencies.\n")
TEXT(" 0: disabled;\n")
TEXT(" 1: enabled (default);\n"),
ECVF_RenderThreadSafe);
#Associated Variable and Callsites
This variable is associated with another variable named GRDGValidation
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphBuilder.cpp:2321
Scope (from outer to inner):
file
function void FRDGBuilder::SetupPassInternals
Source code excerpt:
#if RDG_GPU_DEBUG_SCOPES && RDG_ENABLE_DEBUG
if (GRDGValidation != 0)
{
if (const FRDGEventScope* Scope = Pass->GPUScopes.Event)
{
Pass->FullPathIfDebug = Scope->GetPath(Pass->Name);
}
}
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphBuilder.cpp:4268
Scope (from outer to inner):
file
function void FRDGBuilder::ClobberPassOutputs
Source code excerpt:
void FRDGBuilder::ClobberPassOutputs(const FRDGPass* Pass)
{
if (!GRDGValidation || !GRDGClobberResources || !AuxiliaryPasses.IsClobberAllowed())
{
return;
}
RDG_RECURSION_COUNTER_SCOPE(AuxiliaryPasses.Clobber);
RDG_EVENT_SCOPE(*this, "RDG ClobberResources");
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphEvent.cpp:525
Scope (from outer to inner):
file
function FRDGEventName::FRDGEventName
Source code excerpt:
check(InEventFormat);
if (GRDGValidation != 0)
{
va_list VAList;
va_start(VAList, InEventFormat);
TCHAR TempStr[256];
// Build the string in the temp buffer
FCString::GetVarArgs(TempStr, UE_ARRAY_COUNT(TempStr), InEventFormat, VAList);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphPrivate.cpp:17
Scope: file
Source code excerpt:
ECVF_RenderThreadSafe);
int32 GRDGValidation = 1;
FAutoConsoleVariableRef CVarRDGValidation(
TEXT("r.RDG.Validation"),
GRDGValidation,
TEXT("Enables validation of correctness in API calls and pass parameter dependencies.\n")
TEXT(" 0: disabled;\n")
TEXT(" 1: enabled (default);\n"),
ECVF_RenderThreadSafe);
int32 GRDGDebug = 0;
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphPrivate.cpp:524
Scope (from outer to inner):
file
function void InitRenderGraph
Source code excerpt:
if (FParse::Value(FCommandLine::Get(), TEXT("rdgvalidation="), ValidationValue))
{
GRDGValidation = ValidationValue;
}
if (FParse::Param(FCommandLine::Get(), TEXT("rdgdebug")))
{
GRDGDebug = 1;
}
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphPrivate.h:31
Scope: file
Source code excerpt:
extern int32 GRDGAsyncCompute;
extern int32 GRDGClobberResources;
extern int32 GRDGValidation;
extern int32 GRDGDebug;
extern int32 GRDGDebugFlushGPU;
extern int32 GRDGDebugExtendResourceLifetimes;
extern int32 GRDGDebugDisableTransientResources;
extern int32 GRDGBreakpoint;
extern int32 GRDGTransitionLog;
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphPrivate.h:94
Scope: file
Source code excerpt:
const int32 GRDGClobberResources = 0;
const int32 GRDGValidation = 0;
const int32 GRDGDebug = 0;
const int32 GRDGDebugFlushGPU = 0;
const int32 GRDGDebugExtendResourceLifetimes = 0;
const int32 GRDGDebugDisableTransientResources = 0;
const int32 GRDGBreakpoint = 0;
const int32 GRDGTransitionLog = 0;
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:32
Scope (from outer to inner):
file
function void FRDGResource::MarkResourceAsUsed
Source code excerpt:
void FRDGResource::MarkResourceAsUsed()
{
if (!GRDGValidation)
{
return;
}
ValidateRHIAccess();
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:44
Scope (from outer to inner):
file
function void FRDGResource::ValidateRHIAccess
Source code excerpt:
void FRDGResource::ValidateRHIAccess() const
{
if (!GRDGValidation)
{
return;
}
check(DebugData);
checkf(DebugData->bAllowRHIAccess || GRDGAllowRHIAccess,
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:58
Scope (from outer to inner):
file
function FRDGResourceDebugData& FRDGResource::GetDebugData
Source code excerpt:
FRDGResourceDebugData& FRDGResource::GetDebugData() const
{
check(GRDGValidation != 0);
check(DebugData);
return *DebugData;
}
struct FRDGViewableResourceDebugData
{
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:77
Scope (from outer to inner):
file
function FRDGViewableResourceDebugData& FRDGViewableResource::GetViewableDebugData
Source code excerpt:
FRDGViewableResourceDebugData& FRDGViewableResource::GetViewableDebugData() const
{
check(GRDGValidation != 0);
check(ViewableDebugData);
return *ViewableDebugData;
}
struct FRDGTextureDebugData
{
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:93
Scope (from outer to inner):
file
function FRDGTextureDebugData& FRDGTexture::GetTextureDebugData
Source code excerpt:
FRDGTextureDebugData& FRDGTexture::GetTextureDebugData() const
{
check(GRDGValidation != 0);
check(TextureDebugData);
return *TextureDebugData;
}
struct FRDGBufferDebugData
{
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:106
Scope (from outer to inner):
file
function FRDGBufferDebugData& FRDGBuffer::GetBufferDebugData
Source code excerpt:
FRDGBufferDebugData& FRDGBuffer::GetBufferDebugData() const
{
check(GRDGValidation != 0);
check(BufferDebugData);
return *BufferDebugData;
}
void FRDGUniformBuffer::MarkResourceAsUsed()
{
if (!GRDGValidation)
{
return;
}
FRDGResource::MarkResourceAsUsed();
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:166
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateTexture
Source code excerpt:
void FRDGUserValidation::ValidateCreateTexture(FRDGTextureRef Texture)
{
if (!GRDGValidation)
{
return;
}
ValidateCreateViewableResource(Texture);
Texture->TextureDebugData = Allocator.AllocNoDestruct<FRDGTextureDebugData>();
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:181
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateBuffer
Source code excerpt:
void FRDGUserValidation::ValidateCreateBuffer(FRDGBufferRef Buffer)
{
if (!GRDGValidation)
{
return;
}
ValidateCreateViewableResource(Buffer);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:199
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateSRV
Source code excerpt:
void FRDGUserValidation::ValidateCreateSRV(FRDGTextureSRVRef SRV)
{
if (!GRDGValidation)
{
return;
}
ValidateCreateResource(SRV);
}
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:209
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateSRV
Source code excerpt:
void FRDGUserValidation::ValidateCreateSRV(FRDGBufferSRVRef SRV)
{
if (!GRDGValidation)
{
return;
}
ValidateCreateResource(SRV);
}
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:219
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateUAV
Source code excerpt:
void FRDGUserValidation::ValidateCreateUAV(FRDGTextureUAVRef UAV)
{
if (!GRDGValidation)
{
return;
}
ValidateCreateResource(UAV);
}
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:229
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateUAV
Source code excerpt:
void FRDGUserValidation::ValidateCreateUAV(FRDGBufferUAVRef UAV)
{
if (!GRDGValidation)
{
return;
}
ValidateCreateResource(UAV);
}
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:239
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateUniformBuffer
Source code excerpt:
void FRDGUserValidation::ValidateCreateUniformBuffer(FRDGUniformBufferRef UniformBuffer)
{
if (!GRDGValidation)
{
return;
}
ValidateCreateResource(UniformBuffer);
}
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:252
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateRegisterExternalTexture
Source code excerpt:
ERDGTextureFlags Flags)
{
if (!GRDGValidation)
{
return;
}
checkf(Name!=nullptr, TEXT("Attempted to register external texture with NULL name."));
checkf(ExternalPooledTexture.IsValid(), TEXT("Attempted to register NULL external texture."));
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:264
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateRegisterExternalBuffer
Source code excerpt:
void FRDGUserValidation::ValidateRegisterExternalBuffer(const TRefCountPtr<FRDGPooledBuffer>& ExternalPooledBuffer, const TCHAR* Name, ERDGBufferFlags Flags)
{
if (!GRDGValidation)
{
return;
}
checkf(Name!=nullptr, TEXT("Attempted to register external buffer with NULL name."));
checkf(ExternalPooledBuffer.IsValid(), TEXT("Attempted to register NULL external buffer."));
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:276
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateRegisterExternalTexture
Source code excerpt:
void FRDGUserValidation::ValidateRegisterExternalTexture(FRDGTextureRef Texture)
{
if (!GRDGValidation)
{
return;
}
ValidateCreateTexture(Texture);
}
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:286
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateRegisterExternalBuffer
Source code excerpt:
void FRDGUserValidation::ValidateRegisterExternalBuffer(FRDGBufferRef Buffer)
{
if (!GRDGValidation)
{
return;
}
ValidateCreateBuffer(Buffer);
}
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:296
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateTexture
Source code excerpt:
void FRDGUserValidation::ValidateCreateTexture(const FRDGTextureDesc& Desc, const TCHAR* Name, ERDGTextureFlags Flags)
{
if (!GRDGValidation)
{
return;
}
checkf(Name!=nullptr, TEXT("Creating a texture requires a valid debug name."));
ExecuteGuard(TEXT("CreateTexture"), Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:322
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateBuffer
Source code excerpt:
void FRDGUserValidation::ValidateCreateBuffer(const FRDGBufferDesc& Desc, const TCHAR* Name, ERDGBufferFlags Flags)
{
if (!GRDGValidation)
{
return;
}
checkf(Name!=nullptr, TEXT("Creating a buffer requires a valid debug name."));
ExecuteGuard(TEXT("CreateBuffer"), Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:340
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateSRV
Source code excerpt:
void FRDGUserValidation::ValidateCreateSRV(const FRDGTextureSRVDesc& Desc)
{
if (!GRDGValidation)
{
return;
}
FRDGTextureRef Texture = Desc.Texture;
checkf(Texture, TEXT("Texture SRV created with a null texture."));
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:353
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateSRV
Source code excerpt:
void FRDGUserValidation::ValidateCreateSRV(const FRDGBufferSRVDesc& Desc)
{
if (!GRDGValidation)
{
return;
}
FRDGBufferRef Buffer = Desc.Buffer;
checkf(Buffer, TEXT("Buffer SRV created with a null buffer."));
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:365
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateUAV
Source code excerpt:
void FRDGUserValidation::ValidateCreateUAV(const FRDGTextureUAVDesc& Desc)
{
if (!GRDGValidation)
{
return;
}
FRDGTextureRef Texture = Desc.Texture;
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:381
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateUAV
Source code excerpt:
void FRDGUserValidation::ValidateCreateUAV(const FRDGBufferUAVDesc& Desc)
{
if (!GRDGValidation)
{
return;
}
FRDGBufferRef Buffer = Desc.Buffer;
checkf(Buffer, TEXT("Buffer UAV created with a null buffer."));
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:393
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCreateUniformBuffer
Source code excerpt:
void FRDGUserValidation::ValidateCreateUniformBuffer(const void* ParameterStruct, const FShaderParametersMetadata* Metadata)
{
if (!GRDGValidation)
{
return;
}
check(Metadata);
const TCHAR* Name = Metadata->GetShaderVariableName();
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:406
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateUploadBuffer
Source code excerpt:
void FRDGUserValidation::ValidateUploadBuffer(FRDGBufferRef Buffer, const void* InitialData, uint64 InitialDataSize)
{
if (!GRDGValidation)
{
return;
}
check(Buffer);
checkf(!Buffer->bQueuedForUpload, TEXT("Buffer %s already has an upload queued. Only one upload can be done for each graph."), Buffer->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:418
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateUploadBuffer
Source code excerpt:
void FRDGUserValidation::ValidateUploadBuffer(FRDGBufferRef Buffer, const void* InitialData, uint64 InitialDataSize, const FRDGBufferInitialDataFreeCallback& InitialDataFreeCallback)
{
if (!GRDGValidation)
{
return;
}
check(Buffer);
checkf(!Buffer->bQueuedForUpload, TEXT("Buffer %s already has an upload queued. Only one upload can be done for each graph."), Buffer->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:430
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateUploadBuffer
Source code excerpt:
void FRDGUserValidation::ValidateUploadBuffer(FRDGBufferRef Buffer, const FRDGBufferInitialDataFillCallback& InitialDataFillCallback)
{
if (!GRDGValidation)
{
return;
}
check(Buffer);
checkf(!Buffer->bQueuedForUpload, TEXT("Buffer %s already has an upload queued. Only one upload can be done for each graph."), Buffer->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:442
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateUploadBuffer
Source code excerpt:
void FRDGUserValidation::ValidateUploadBuffer(FRDGBufferRef Buffer, const FRDGBufferInitialDataCallback& InitialDataCallback, const FRDGBufferInitialDataSizeCallback& InitialDataSizeCallback)
{
if (!GRDGValidation)
{
return;
}
check(Buffer);
checkf(!Buffer->bQueuedForUpload, TEXT("Buffer %s already has an upload queued. Only one upload can be done for each graph."), Buffer->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:454
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateUploadBuffer
Source code excerpt:
void FRDGUserValidation::ValidateUploadBuffer(FRDGBufferRef Buffer, const FRDGBufferInitialDataCallback& InitialDataCallback, const FRDGBufferInitialDataSizeCallback& InitialDataSizeCallback, const FRDGBufferInitialDataFreeCallback& InitialDataFreeCallback)
{
if (!GRDGValidation)
{
return;
}
check(Buffer);
checkf(!Buffer->bQueuedForUpload, TEXT("Buffer %s already has an upload queued. Only one upload can be done for each graph."), Buffer->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:466
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateCommitBuffer
Source code excerpt:
void FRDGUserValidation::ValidateCommitBuffer(FRDGBufferRef Buffer, uint64 CommitSizeInBytes)
{
if (!GRDGValidation)
{
return;
}
check(Buffer);
checkf(EnumHasAnyFlags(Buffer->Desc.Usage, BUF_ReservedResource), TEXT("Buffer %s is not marked as reserved and thus cannot be queued for reserved resource commit."), Buffer->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:479
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateExtractTexture
Source code excerpt:
void FRDGUserValidation::ValidateExtractTexture(FRDGTextureRef Texture, TRefCountPtr<IPooledRenderTarget>* OutTexturePtr)
{
if (!GRDGValidation)
{
return;
}
ValidateExtractResource(Texture);
checkf(OutTexturePtr, TEXT("Texture %s was extracted, but the output texture pointer is null."), Texture->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:490
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateExtractBuffer
Source code excerpt:
void FRDGUserValidation::ValidateExtractBuffer(FRDGBufferRef Buffer, TRefCountPtr<FRDGPooledBuffer>* OutBufferPtr)
{
if (!GRDGValidation)
{
return;
}
ValidateExtractResource(Buffer);
checkf(OutBufferPtr, TEXT("Texture %s was extracted, but the output texture pointer is null."), Buffer->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:516
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateConvertToExternalResource
Source code excerpt:
void FRDGUserValidation::ValidateConvertToExternalResource(FRDGViewableResource* Resource)
{
if (!GRDGValidation)
{
return;
}
check(Resource);
checkf(!bHasExecuteBegun || !Resource->bTransient,
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:529
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateConvertToExternalUniformBuffer
Source code excerpt:
void FRDGUserValidation::ValidateConvertToExternalUniformBuffer(FRDGUniformBuffer* UniformBuffer)
{
if (!GRDGValidation)
{
return;
}
check(UniformBuffer);
checkf(!bHasExecuteBegun,
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:542
Scope (from outer to inner):
file
function void FRDGUserValidation::RemoveUnusedWarning
Source code excerpt:
void FRDGUserValidation::RemoveUnusedWarning(FRDGViewableResource* Resource)
{
if (!GRDGValidation)
{
return;
}
check(Resource);
ExecuteGuard(TEXT("RemoveUnusedResourceWarning"), Resource->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:559
Scope (from outer to inner):
file
function bool FRDGUserValidation::TryMarkForClobber
Source code excerpt:
bool FRDGUserValidation::TryMarkForClobber(FRDGViewableResource* Resource) const
{
if (!GRDGValidation)
{
return false;
}
check(Resource);
FRDGViewableResourceDebugData& DebugData = Resource->GetViewableDebugData();
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:579
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateGetPooledTexture
Source code excerpt:
void FRDGUserValidation::ValidateGetPooledTexture(FRDGTextureRef Texture) const
{
if (!GRDGValidation)
{
return;
}
check(Texture);
checkf(Texture->bExternal, TEXT("GetPooledTexture called on texture %s, but it is not external. Call PreallocateTexture or register as an external texture instead."), Texture->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:590
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateGetPooledBuffer
Source code excerpt:
void FRDGUserValidation::ValidateGetPooledBuffer(FRDGBufferRef Buffer) const
{
if (!GRDGValidation)
{
return;
}
check(Buffer);
checkf(Buffer->bExternal, TEXT("GetPooledBuffer called on buffer %s, but it is not external. Call PreallocateBuffer or register as an external buffer instead."), Buffer->Name);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:601
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateSetAccessFinal
Source code excerpt:
void FRDGUserValidation::ValidateSetAccessFinal(FRDGViewableResource* Resource, ERHIAccess AccessFinal)
{
if (!GRDGValidation)
{
return;
}
check(Resource);
check(AccessFinal != ERHIAccess::Unknown && IsValidAccess(AccessFinal));
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:614
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateUseExternalAccessMode
Source code excerpt:
void FRDGUserValidation::ValidateUseExternalAccessMode(FRDGViewableResource* Resource, ERHIAccess ReadOnlyAccess, ERHIPipeline Pipelines)
{
if (!GRDGValidation)
{
return;
}
check(Resource);
check(Pipelines != ERHIPipeline::None);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:645
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateUseInternalAccessMode
Source code excerpt:
void FRDGUserValidation::ValidateUseInternalAccessMode(FRDGViewableResource* Resource)
{
if (!GRDGValidation)
{
return;
}
check(Resource);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:658
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateExternalAccess
Source code excerpt:
void FRDGUserValidation::ValidateExternalAccess(FRDGViewableResource* Resource, ERHIAccess Access, const FRDGPass* Pass)
{
if (!GRDGValidation)
{
return;
}
const auto& AccessModeState = Resource->AccessModeState;
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:676
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateAddSubresourceAccess
Source code excerpt:
void FRDGUserValidation::ValidateAddSubresourceAccess(FRDGViewableResource* Resource, const FRDGSubresourceState& Subresource, ERHIAccess Access)
{
if (!GRDGValidation)
{
return;
}
const bool bOldAccessMergeable = EnumHasAnyFlags(Subresource.Access, GRHIMergeableAccessMask) || Subresource.Access == ERHIAccess::Unknown;
const bool bNewAccessMergeable = EnumHasAnyFlags(Access, GRHIMergeableAccessMask);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:691
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateAddPass
Source code excerpt:
void FRDGUserValidation::ValidateAddPass(const FRDGEventName& Name, ERDGPassFlags Flags)
{
if (!GRDGValidation)
{
return;
}
ExecuteGuard(TEXT("AddPass"), Name.GetTCHAR());
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:704
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateAddPass
Source code excerpt:
void FRDGUserValidation::ValidateAddPass(const void* ParameterStruct, const FShaderParametersMetadata* Metadata, const FRDGEventName& Name, ERDGPassFlags Flags)
{
if (!GRDGValidation)
{
return;
}
checkf(ParameterStruct, TEXT("Pass '%s' created with null parameters."), Name.GetTCHAR());
ExecuteGuard(TEXT("AddPass"), Name.GetTCHAR());
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:730
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateAddPass
Source code excerpt:
void FRDGUserValidation::ValidateAddPass(const FRDGPass* Pass, bool bSkipPassAccessMarking)
{
if (!GRDGValidation)
{
return;
}
const FRenderTargetBindingSlots* RenderTargetBindingSlots = nullptr;
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:1050
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateExecuteEnd
Source code excerpt:
GRDGBuilderActive = false;
if (GRDGDebug && GRDGValidation)
{
auto ValidateResourceAtExecuteEnd = [](const FRDGViewableResource* Resource)
{
const auto& ViewableDebugData = Resource->GetViewableDebugData();
const bool bProducedButNeverUsed = ViewableDebugData.PassAccessCount == 1 && ViewableDebugData.FirstProducer;
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:1103
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateExecutePassBegin
Source code excerpt:
void FRDGUserValidation::ValidateExecutePassBegin(const FRDGPass* Pass)
{
if (bParallelExecuteEnabled || !GRDGValidation)
{
return;
}
SetAllowRHIAccess(Pass, true);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:1203
Scope (from outer to inner):
file
function void FRDGUserValidation::ValidateExecutePassEnd
Source code excerpt:
void FRDGUserValidation::ValidateExecutePassEnd(const FRDGPass* Pass)
{
if (bParallelExecuteEnabled || !GRDGValidation)
{
return;
}
SetAllowRHIAccess(Pass, false);
#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/RenderGraphValidation.cpp:1267
Scope (from outer to inner):
file
function void FRDGUserValidation::SetAllowRHIAccess
Source code excerpt:
void FRDGUserValidation::SetAllowRHIAccess(const FRDGPass* Pass, bool bAllowAccess)
{
if (!GRDGValidation)
{
return;
}
Pass->GetParameters().Enumerate([&](FRDGParameter Parameter)
{