17#if ENABLE_RHI_VALIDATION
23#if ENABLE_RHI_VALIDATION
111 struct FSubresourceIndex
119 constexpr FSubresourceIndex()
131 inline bool IsWholeResource()
const
151 inline bool operator == (
const FState& RHS)
const
153 return Access == RHS.Access &&
154 Pipelines == RHS.Pipelines;
159 return !(*
this == RHS);
164 return FString::Printf(
TEXT(
"Access: %s, Pipelines: %s"),
186 bool bTransitioning =
false;
216 uint32 ArraySlice, NumArraySlices;
217 uint32 PlaneIndex, NumPlanes;
232 return MipIndex == RHS.MipIndex
234 && ArraySlice == RHS.ArraySlice
235 && NumArraySlices == RHS.NumArraySlices
236 && PlaneIndex == RHS.PlaneIndex
237 && NumPlanes == RHS.NumPlanes;
242 return !(*
this == RHS);
245 inline bool IsWholeResource(FResource& Resource)
const;
267 return Resource == RHS.Resource
268 && SubresourceRange == RHS.SubresourceRange;
273 return !(*
this == RHS);
295 enum class EStatus :
uint8
309 bool bTransient =
false;
310 EStatus Status = EStatus::None;
312 inline bool IsAcquired()
const {
return Status == EStatus::Acquired; }
313 inline bool IsDiscarded()
const {
return Status == EStatus::Discarded; }
329 friend FValidationRHI;
333 uint32 NumArraySlices = 0;
351 checkf(
NumOpRefs.GetValue() == 0,
TEXT(
"RHI validation resource '%s' is being deleted, but it is still queued in the replay command stream!"), *DebugName);
357 inline const TCHAR* GetDebugName()
const {
return DebugName.Len() ? *DebugName :
nullptr; }
369 check(RefCount >= 0);
379 return NumMips * NumArraySlices * NumPlanes;
384 checkSlow(NumMips > 0 && NumArraySlices > 0 && NumPlanes > 0);
387 SubresourceRange.MipIndex = 0;
388 SubresourceRange.ArraySlice = 0;
389 SubresourceRange.PlaneIndex = 0;
390 SubresourceRange.NumMips =
NumMips;
391 SubresourceRange.NumArraySlices = NumArraySlices;
392 SubresourceRange.NumPlanes = NumPlanes;
393 return SubresourceRange;
399 Identity.Resource =
this;
410 inline bool FSubresourceRange::IsWholeResource(FResource& Resource)
const
416 && NumArraySlices == Resource.NumArraySlices
417 && NumPlanes == Resource.NumPlanes;
481 Identity.SubresourceRange.NumPlanes = 1;
507 inline bool operator == (
FUAVBinding const& RHS)
const
509 return UAV == RHS.UAV
515 return !(*
this == RHS);
545 WorkerData[WorkerIndex].UAVs.Add({
UAV,
InSlot });
553 bool bIsDirty =
true;
555 struct FWorkerThreadData
561 static constexpr uint32 MaxBindingWorkers = 5;
562 FWorkerThreadData WorkerData[MaxBindingWorkers];
588#if WITH_RHI_BREADCRUMBS
618 FState PreviousState;
628 FState PreviousState;
693#if WITH_RHI_BREADCRUMBS
713 Identity.Resource->AddOpRef();
717 Op.Type = EOpType::BeginTransition;
718 Op.Data_BeginTransition.Identity = Identity;
719 Op.Data_BeginTransition.PreviousState = PreviousState;
720 Op.Data_BeginTransition.NextState = NextState;
721 Op.Data_BeginTransition.Flags =
Flags;
722 Op.Data_BeginTransition.CreateFlags = CreateFlags;
731 Identity.Resource->AddOpRef();
735 Op.Type = EOpType::EndTransition;
736 Op.Data_EndTransition.Identity = Identity;
737 Op.Data_EndTransition.PreviousState = PreviousState;
738 Op.Data_EndTransition.NextState = NextState;
739 Op.Data_EndTransition.Flags =
Flags;
744 static inline FOperation SetTrackedAccess(FResource* Resource, FState State)
746 Resource->AddOpRef();
749 Op.Type = EOpType::SetTrackedAccess;
750 Op.Data_SetTrackedAccess.Resource = Resource;
751 Op.Data_SetTrackedAccess.State =
State;
761 Op.Type = EOpType::AliasingOverlap;
770 Resource->AddOpRef();
773 Op.Type = EOpType::AcquireTransient;
774 Op.Data_AcquireTransient.Resource = Resource;
781 Resource->AddOpRef();
784 Op.Type = EOpType::InitTransient;
785 Op.Data_InitTransient.Resource = Resource;
793 Identity.Resource->AddOpRef();
796 Op.Type = EOpType::Assert;
797 Op.Data_Assert.Identity = Identity;
802 static inline FOperation Rename(FResource* Resource,
const TCHAR* NewName,
const TCHAR* Suffix =
nullptr)
804 Resource->AddOpRef();
807 Op.Type = EOpType::Rename;
808 Op.Data_Rename.Resource = Resource;
810 Op.Data_Rename.Suffix =
Suffix;
817 Op.Type = EOpType::Signal;
818 Op.Data_Signal.Fence = Fence;
825 Op.Type = EOpType::Wait;
826 Op.Data_Wait.Fence = Fence;
833 Op.Type = EOpType::AllUAVsOverlap;
834 Op.Data_AllUAVsOverlap.bAllow =
bAllow;
840 Identity.Resource->AddOpRef();
843 Op.Type = EOpType::SpecificUAVOverlap;
844 Op.Data_SpecificUAVOverlap.Identity = Identity;
845 Op.Data_SpecificUAVOverlap.bAllow =
bAllow;
849#if WITH_RHI_BREADCRUMBS
855 Op.Type = EOpType::BeginBreadcrumbGPU;
865 Op.Type = EOpType::EndBreadcrumbGPU;
876 Op.Type = EOpType::SetBreadcrumbRange;
887 OutString =
new TCHAR[Len + 1];
917#if WITH_RHI_BREADCRUMBS
964 if (Slot >= UAVs.
Num())
999#if WITH_RHI_BREADCRUMBS
1013 AddOp(FOperation::SetTrackedAccess(Resource, FState(Access, Pipelines)));
1016 void Rename(FResource* Resource,
const TCHAR* NewName,
const TCHAR* Suffix =
nullptr)
1018 AddOp(FOperation::Rename(Resource, NewName, Suffix));
1043 AddOp(FOperation::EndTransitionResource(Identity, PreviousState, NextState,
Flags,
nullptr));
1053 AddOp(FOperation::SpecificUAVOverlap(Identity,
bAllow));
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
@ InPlace
Definition CoreMiscDefines.h:162
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::EnumFlags::Private::TRange< EnumType > MakeFlagsRange(EnumType Flags)
Definition EnumRange.h:285
UE_FORCEINLINE_HINT bool operator!=(const FIndexedPointer &Other) const
Definition LockFreeList.h:76
ERHIAccess
Definition RHIAccess.h:11
ERayTracingBindingType
Definition RHICommandList.h:281
EShaderFrequency
Definition RHIDefinitions.h:202
@ SF_NumFrequencies
Definition RHIDefinitions.h:216
EResourceTransitionFlags
Definition RHIDefinitions.h:1517
EUniformBufferUsage
Definition RHIDefinitions.h:536
ERHITransitionCreateFlags
Definition RHIDefinitions.h:1495
ETextureCreateFlags
Definition RHIDefinitions.h:1091
FRHIGlobals GRHIGlobals
Definition RHIGlobals.cpp:6
ERHIPipeline
Definition RHIPipeline.h:13
ERayTracingHitGroupIndexingMode
Definition RHIResources.h:3628
ERayTracingShaderBindingTableLifetime
Definition RHIResources.h:3613
ERayTracingShaderBindingMode
Definition RHIResources.h:3620
FString GetRHIPipelineName(ERHIPipeline Pipeline)
Definition RHIStrings.cpp:512
FString GetRHIAccessName(ERHIAccess Access)
Definition RHIStrings.cpp:466
const bool GRHIValidationEnabled
Definition RHIValidationCommon.h:20
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
uint32 PointerHash(const void *Key)
Definition TypeHash.h:91
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition PipelineStateCache.cpp:712
Definition RHIResources.h:1115
Definition RHIResources.h:984
Definition RHIResources.h:3304
Definition RHIResources.h:854
Definition RHIResources.h:2153
Definition RHIResources.h:3294
Definition RHIResources.h:1265
Definition RHIResources.h:5023
Definition PipelineStateCache.cpp:1285
Definition TextureResource.h:103
Definition ThreadSafeCounter.h:14
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition AssetRegistryState.h:50
Definition RHIPipeline.h:55
constexpr int32 NumMips
Definition DistanceFieldAtlas.h:44
@ Range
Definition EnvQueryTypes.h:81
@ Suffix
Definition MirrorDataTable.h:34
Type
Definition PawnAction_Move.h:11
@ List
Definition ITypedTableView.h:38
uint32 GetTypeHash(const FKey &Key)
Definition BlackboardKey.h:35
void Dispatch(FRHIComputeCommandList &RHICmdList, const TShaderRef< TShaderClass > &ComputeShader, const FShaderParametersMetadata *ParametersMetadata, const typename TShaderClass::FParameters &Parameters, FIntVector GroupCount)
Definition RenderGraphUtils.h:491
FString ToString(uint16 Value)
Definition PathFollowingComponent.cpp:82
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
void Draw(const FLinearBoundary &Boundary, const FRestrictionCurve &Curve, EVisuProperty Property)
Definition Display.cpp:95
State
Definition PacketHandler.h:88
UE_AUTORTFM_NOAUTORTFM FWaitState Wait(const void *Address, bool(*CanWait)(void *), void *CanWaitContext, void(*BeforeWait)(void *), void *BeforeWaitContext)
Definition ParkingLot.cpp:504
U16 Index
Definition radfft.cpp:71
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition RHIResources.h:1417
static constexpr int32 MinGuaranteedSimultaneousUAVs
Definition RHIGlobals.h:347
Definition RHIResources.h:1938
Definition RHITransition.h:119
Definition RHIResources.h:2648
Definition RHICommandList.h:267
Definition RHIResources.h:3635
static int32 Strlen(const CharType *String)
Definition CString.h:1047