21template<
typename TResourceType,
typename TCallback>
26 uint32 BufferOffset = ResourceMap[BufferIndex];
40 ,
TEXT(
"Null %s (resource %d bind %d) on UB Layout %s")
44 , *
Buffer->GetLayout().GetDebugName()
54template<
typename TBinder,
typename TUniformBufferArrayType,
typename TBitMaskType,
bool bFullyBindless = false>
57 , RHIValidation::FTracker*
Tracker
67 #if PLATFORM_SUPPORTS_BINDLESS_RENDERING && !ENABLE_RHI_VALIDATION
80 Texture->SetLastRenderTime(CurrentTimeForTextureTimes);
97 check(BufferIndex <
SRT.ResourceTableLayoutHashes.Num());
105 UE_LOG(
LogRHI,
Fatal,
TEXT(
"Shader expected a uniform buffer at slot %u but got null instead (Shader='%s' UB='%s'). Rendering code needs to set a valid uniform buffer for this slot.")
108 , *
Shader.GetUniformBufferName(BufferIndex)
111 else if (
Buffer->GetLayout().GetHash() !=
SRT.ResourceTableLayoutHashes[BufferIndex])
120 , Resource.MemberType
126 TEXT(
"Uniform buffer bound to slot %u is not what the shader expected:\n")
127 TEXT(
"\tBound : Uniform Buffer[%s] with Hash[0x%08x]\n")
128 TEXT(
"\tExpected : Uniform Buffer[%s] with Hash[0x%08x]\n")
129 TEXT(
"\tShader Name : %s\n")
130 TEXT(
"\tLayout CB Size : %d\n")
131 TEXT(
"\tLayout Num Resources : %d\n")
132 TEXT(
"\tResource Types : %s\n")
135 , *
Shader.GetUniformBufferName(BufferIndex),
SRT.ResourceTableLayoutHashes[BufferIndex]
149 #if ENABLE_RHI_VALIDATION
152 ERHIAccess Access = IsComputeShaderFrequency(Shader.GetFrequency())
153 ? ERHIAccess::SRVCompute
154 : Shader.GetFrequency() == SF_Pixel
155 ? ERHIAccess::SRVGraphicsPixel
156 : ERHIAccess::SRVGraphicsNonPixel;
160 Tracker->Assert(Texture->GetViewIdentity(0, 0, 0, 0, uint32(RHIValidation::EResourcePlane::Common), 1), Access);
171 #if ENABLE_RHI_VALIDATION
174 ERHIAccess Access = IsComputeShaderFrequency(Shader.GetFrequency())
175 ? ERHIAccess::SRVCompute
176 : Shader.GetFrequency() == SF_Pixel
177 ? ERHIAccess::SRVGraphicsPixel
178 : ERHIAccess::SRVGraphicsNonPixel;
180 Tracker->Assert(SRV->GetViewIdentity(), Access);
190 #if PLATFORM_SUPPORTS_BINDLESS_RENDERING
194 #if ENABLE_RHI_VALIDATION
197 Binder.SetResourceCollection(ResourceCollection, Index);
205 Binder.SetSampler(Sampler, Index);
212 #if ENABLE_RHI_VALIDATION
215 ERHIAccess Access = IsComputeShaderFrequency(Shader.GetFrequency())
216 ? ERHIAccess::UAVCompute
217 : ERHIAccess::UAVGraphics;
219 Tracker->AssertUAV(UAV, Access, Index);
230template<
typename TBinder,
typename TUniformBufferArrayType,
typename TBitMaskType>
233 , RHIValidation::FTracker*
Tracker
240 , DirtyUniformBuffers
241 , BoundUniformBuffers
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define ENABLE_RHI_VALIDATION
Definition Build.h:475
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
const bool GRHIValidationEnabled
Definition RHIValidationCommon.h:20
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
if(Failed) console_printf("Failed.\n")
static FORCEINLINE double GetCurrentTime()
Definition App.h:602
Definition RHIResourceCollection.h:46
Definition RHIResources.h:671
Definition RHIResources.h:3304
Definition RHIResources.h:854
Definition RHIResources.h:2153
Definition RHIResources.h:3294
Definition RefCounting.h:454
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
Definition RHIUniformBufferUtilities.h:12
void EnumerateUniformBufferResources(const FRHIUniformBuffer *RESTRICT Buffer, int32 BufferIndex, const uint32 *RESTRICT ResourceMap, TCallback &&Callback)
Definition RHIUniformBufferUtilities.h:22
void SetFullyBindlessUniformBufferResourcesFromTables(TBinder &&Binder, const FRHIShader &Shader, TBitMaskType &DirtyUniformBuffers, const TUniformBufferArrayType &BoundUniformBuffers)
Definition RHIUniformBufferUtilities.h:231
void SetUniformBufferResourcesFromTables(TBinder &&Binder, FRHIShader const &Shader, TBitMaskType &DirtyUniformBuffers, TUniformBufferArrayType const &BoundUniformBuffers)
Definition RHIUniformBufferUtilities.h:55
U16 Index
Definition radfft.cpp:71
static uint16 GetBindIndex(uint32 Data)
Definition RHIDefinitions.h:761
static uint16 GetUniformBufferIndex(uint32 Data)
Definition RHIDefinitions.h:751
static uint16 GetResourceIndex(uint32 Data)
Definition RHIDefinitions.h:756
Definition RHIResources.h:755
Definition RHIUniformBufferUtilities.h:14