UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UnifiedBuffer.cpp File Reference
#include "UnifiedBuffer.h"
#include "Containers/ResourceArray.h"
#include "RHI.h"
#include "ShaderParameters.h"
#include "ShaderParameterStruct.h"
#include "Shader.h"
#include "GlobalShader.h"
#include "RenderGraphUtils.h"
#include "RHIResourceUtils.h"
#include "DataDrivenShaderPlatformInfo.h"

Classes

struct  FUint8
 
class  FByteBufferShader
 
class  FMemsetBufferCS
 
class  FMemcpyCS
 
class  FScatterCopyCS
 
struct  ResourceTypeTraits< FRWBuffer >
 
struct  ResourceTypeTraits< FRWBufferStructured >
 
struct  ResourceTypeTraits< FRWByteAddressBuffer >
 
class  FRDGByteBufferShader
 
class  FRDGMemsetBufferCS
 
class  FRDGMemcpyCS
 
class  FRDGScatterCopyCS
 
struct  FScatterUploadConfig
 
struct  FScatterUploadDispatchConfig
 

Enumerations

enum class  EByteBufferResourceType {
  Float4_Buffer , StructuredBuffer , Uint_Buffer , Uint4Aligned_Buffer ,
  Count
}
 
enum class  EByteBufferStructuredSize {
  Uint1 , Uint2 , Uint4 , Uint8 ,
  Count
}
 
enum class  EResourceType { BUFFER , STRUCTURED_BUFFER , BYTEBUFFER }
 

Functions

 IMPLEMENT_GLOBAL_SHADER (FMemsetBufferCS, "/Engine/Private/ByteBuffer.usf", "MemsetBufferCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FMemcpyCS, "/Engine/Private/ByteBuffer.usf", "MemcpyCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FScatterCopyCS, "/Engine/Private/ByteBuffer.usf", "ScatterCopyCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FRDGMemsetBufferCS, "/Engine/Private/ByteBuffer.usf", "MemsetBufferCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FRDGMemcpyCS, "/Engine/Private/ByteBuffer.usf", "MemcpyCS", SF_Compute)
 
 IMPLEMENT_GLOBAL_SHADER (FRDGScatterCopyCS, "/Engine/Private/ByteBuffer.usf", "ScatterCopyCS", SF_Compute)
 
EResourceType GetBufferType (FRDGBuffer *Buffer)
 
EResourceType GetResourceType (FRDGViewableResource *Resource)
 
void MemsetResource (FRDGBuilder &GraphBuilder, FRDGBuffer *DstResource, const FMemsetResourceParams &Params)
 
void MemcpyResource (FRDGBuilder &GraphBuilder, FRDGBuffer *DstResource, FRDGBuffer *SrcResource, const FMemcpyResourceParams &Params)
 
void MemsetResource (FRDGBuilder &GraphBuilder, FRDGUnorderedAccessView *UAV, const FMemsetResourceParams &Params)
 
void MemsetResource (FRDGBuilder &GraphBuilder, FRDGBufferUAV *UAV, const FMemsetResourceParams &Params)
 
void MemcpyResource (FRDGBuilder &GraphBuilder, FRDGUnorderedAccessView *UAV, FRDGShaderResourceView *SRV, const FMemcpyResourceParams &Params)
 
void MemcpyResource (FRDGBuilder &GraphBuilder, FRDGBufferUAV *UAV, FRDGBufferSRV *SRV, const FMemcpyResourceParams &Params)
 
FRDGBufferResizeBufferIfNeeded (FRDGBuilder &GraphBuilder, TRefCountPtr< FRDGPooledBuffer > &ExternalBuffer, const FRDGBufferDesc &BufferDesc, const TCHAR *Name)
 
FRDGBufferResizeBufferIfNeeded (FRDGBuilder &GraphBuilder, TRefCountPtr< FRDGPooledBuffer > &ExternalBuffer, EPixelFormat Format, uint32 NumElements, const TCHAR *Name)
 
FRDGBufferResizeStructuredBufferIfNeeded (FRDGBuilder &GraphBuilder, TRefCountPtr< FRDGPooledBuffer > &ExternalBuffer, uint32 NumBytes, const TCHAR *Name)
 
FRDGBufferResizeStructuredBufferSOAIfNeeded (FRDGBuilder &GraphBuilder, TRefCountPtr< FRDGPooledBuffer > &ExternalBuffer, const FResizeResourceSOAParams &Params, const TCHAR *Name)
 
FRDGBufferResizeByteAddressBufferIfNeeded (FRDGBuilder &GraphBuilder, TRefCountPtr< FRDGPooledBuffer > &ExternalBuffer, uint32 NumBytes, const TCHAR *Name)
 
void ScatterCopyResource (FRDGBuilder &GraphBuilder, FRDGViewableResource *DstResource, FRDGBufferSRV *ScatterBufferSRV, FRDGBufferSRV *UploadBufferSRV, const FScatterCopyParams &Params)
 
void ScatterCopyResource (FRDGBuilder &GraphBuilder, FRDGBuffer *DstResource, FRDGBufferSRV *ScatterBufferSRV, FRDGBufferSRV *UploadBufferSRV, const FAsyncScatterCopyParams &Params)
 
void ScatterCopyResource (FRDGBuilder &GraphBuilder, FRDGBuffer *DstResource, FRDGBufferSRV *ScatterBufferSRV, FRDGBufferSRV *UploadBufferSRV, const FScatterCopyParams &Params)
 
template<typename ResourceType >
void MemsetResource (FRHICommandList &RHICmdList, const ResourceType &DstBuffer, const FMemsetResourceParams &Params)
 
template<typename ResourceType >
void MemcpyResource (FRHICommandList &RHICmdList, const ResourceType &DstBuffer, const ResourceType &SrcBuffer, const FMemcpyResourceParams &Params, bool bAlreadyInUAVOverlap)
 
template<>
RENDERCORE_API bool ResizeResourceIfNeeded< FRWBufferStructured > (FRHICommandList &RHICmdList, FRWBufferStructured &Buffer, uint32 NumBytes, const TCHAR *DebugName)
 
template<>
RENDERCORE_API bool ResizeResourceIfNeeded< FRWByteAddressBuffer > (FRHICommandList &RHICmdList, FRWByteAddressBuffer &Buffer, uint32 NumBytes, const TCHAR *DebugName)
 
RENDERCORE_API bool ResizeResourceIfNeeded (FRHICommandList &RHICmdList, FRWBuffer &Buffer, EPixelFormat Format, uint32 NumElements, const TCHAR *DebugName)
 
RENDERCORE_API bool ResizeResourceSOAIfNeeded (FRHICommandList &RHICmdList, FRWBufferStructured &Buffer, const FResizeResourceSOAParams &Params, const TCHAR *DebugName)
 
RENDERCORE_API bool ResizeResourceSOAIfNeeded (FRDGBuilder &GraphBuilder, FRWBufferStructured &Buffer, const FResizeResourceSOAParams &Params, const TCHAR *DebugName)
 
template<typename FBufferType >
void AddCopyBufferPass (FRDGBuilder &GraphBuilder, const FBufferType &NewBuffer, const FBufferType &OldBuffer, uint32 ElementSize)
 
RENDERCORE_API bool ResizeResourceIfNeeded (FRDGBuilder &GraphBuilder, FRWBufferStructured &Buffer, uint32 NumBytes, const TCHAR *DebugName)
 
RENDERCORE_API bool ResizeResourceIfNeeded (FRDGBuilder &GraphBuilder, FRWByteAddressBuffer &Buffer, uint32 NumBytes, const TCHAR *DebugName)
 
RENDERCORE_API bool ResizeResourceIfNeeded (FRDGBuilder &GraphBuilder, FRWBuffer &Buffer, EPixelFormat Format, uint32 NumElements, const TCHAR *DebugName)
 
template RENDERCORE_API void MemsetResource< FRWBufferStructured > (FRHICommandList &RHICmdList, const FRWBufferStructured &DstBuffer, const FMemsetResourceParams &Params)
 
template RENDERCORE_API void MemsetResource< FRWByteAddressBuffer > (FRHICommandList &RHICmdList, const FRWByteAddressBuffer &DstBuffer, const FMemsetResourceParams &Params)
 
template RENDERCORE_API void MemcpyResource< FRWBuffer > (FRHICommandList &RHICmdList, const FRWBuffer &DstBuffer, const FRWBuffer &SrcBuffer, const FMemcpyResourceParams &Params, bool bAlreadyInUAVOverlap)
 
template RENDERCORE_API void MemcpyResource< FRWBufferStructured > (FRHICommandList &RHICmdList, const FRWBufferStructured &DstBuffer, const FRWBufferStructured &SrcBuffer, const FMemcpyResourceParams &Params, bool bAlreadyInUAVOverlap)
 
template RENDERCORE_API void MemcpyResource< FRWByteAddressBuffer > (FRHICommandList &RHICmdList, const FRWByteAddressBuffer &DstBuffer, const FRWByteAddressBuffer &SrcBuffer, const FMemcpyResourceParams &Params, bool bAlreadyInUAVOverlap)
 

Enumeration Type Documentation

◆ EByteBufferResourceType

Enumerator
Float4_Buffer 
StructuredBuffer 
Uint_Buffer 
Uint4Aligned_Buffer 
Count 

◆ EByteBufferStructuredSize

Enumerator
Uint1 
Uint2 
Uint4 
Uint8 
Count 

◆ EResourceType

enum class EResourceType
strong
Enumerator
BUFFER 
STRUCTURED_BUFFER 
BYTEBUFFER 

Function Documentation

◆ AddCopyBufferPass()

template<typename FBufferType >
void AddCopyBufferPass ( FRDGBuilder GraphBuilder,
const FBufferType NewBuffer,
const FBufferType OldBuffer,
uint32  ElementSize 
)

◆ GetBufferType()

EResourceType GetBufferType ( FRDGBuffer Buffer)

◆ GetResourceType()

EResourceType GetResourceType ( FRDGViewableResource Resource)

◆ IMPLEMENT_GLOBAL_SHADER() [1/6]

IMPLEMENT_GLOBAL_SHADER ( FMemcpyCS  ,
"/Engine/Private/ByteBuffer.usf"  ,
"MemcpyCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [2/6]

IMPLEMENT_GLOBAL_SHADER ( FMemsetBufferCS  ,
"/Engine/Private/ByteBuffer.usf"  ,
"MemsetBufferCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [3/6]

IMPLEMENT_GLOBAL_SHADER ( FRDGMemcpyCS  ,
"/Engine/Private/ByteBuffer.usf"  ,
"MemcpyCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [4/6]

IMPLEMENT_GLOBAL_SHADER ( FRDGMemsetBufferCS  ,
"/Engine/Private/ByteBuffer.usf"  ,
"MemsetBufferCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [5/6]

IMPLEMENT_GLOBAL_SHADER ( FRDGScatterCopyCS  ,
"/Engine/Private/ByteBuffer.usf"  ,
"ScatterCopyCS"  ,
SF_Compute   
)

◆ IMPLEMENT_GLOBAL_SHADER() [6/6]

IMPLEMENT_GLOBAL_SHADER ( FScatterCopyCS  ,
"/Engine/Private/ByteBuffer.usf"  ,
"ScatterCopyCS"  ,
SF_Compute   
)

◆ MemcpyResource() [1/4]

void MemcpyResource ( FRDGBuilder GraphBuilder,
FRDGBuffer DstResource,
FRDGBuffer SrcResource,
const FMemcpyResourceParams Params 
)

◆ MemcpyResource() [2/4]

void MemcpyResource ( FRDGBuilder GraphBuilder,
FRDGBufferUAV UAV,
FRDGBufferSRV SRV,
const FMemcpyResourceParams Params 
)

◆ MemcpyResource() [3/4]

void MemcpyResource ( FRDGBuilder GraphBuilder,
FRDGUnorderedAccessView UAV,
FRDGShaderResourceView SRV,
const FMemcpyResourceParams Params 
)

◆ MemcpyResource() [4/4]

template<typename ResourceType >
void MemcpyResource ( FRHICommandList RHICmdList,
const ResourceType &  DstBuffer,
const ResourceType &  SrcBuffer,
const FMemcpyResourceParams Params,
bool  bAlreadyInUAVOverlap 
)

◆ MemcpyResource< FRWBuffer >()

template RENDERCORE_API void MemcpyResource< FRWBuffer > ( FRHICommandList RHICmdList,
const FRWBuffer DstBuffer,
const FRWBuffer SrcBuffer,
const FMemcpyResourceParams Params,
bool  bAlreadyInUAVOverlap 
)

◆ MemcpyResource< FRWBufferStructured >()

template RENDERCORE_API void MemcpyResource< FRWBufferStructured > ( FRHICommandList RHICmdList,
const FRWBufferStructured DstBuffer,
const FRWBufferStructured SrcBuffer,
const FMemcpyResourceParams Params,
bool  bAlreadyInUAVOverlap 
)

◆ MemcpyResource< FRWByteAddressBuffer >()

template RENDERCORE_API void MemcpyResource< FRWByteAddressBuffer > ( FRHICommandList RHICmdList,
const FRWByteAddressBuffer DstBuffer,
const FRWByteAddressBuffer SrcBuffer,
const FMemcpyResourceParams Params,
bool  bAlreadyInUAVOverlap 
)

◆ MemsetResource() [1/4]

void MemsetResource ( FRDGBuilder GraphBuilder,
FRDGBuffer DstResource,
const FMemsetResourceParams Params 
)

◆ MemsetResource() [2/4]

void MemsetResource ( FRDGBuilder GraphBuilder,
FRDGBufferUAV UAV,
const FMemsetResourceParams Params 
)

◆ MemsetResource() [3/4]

void MemsetResource ( FRDGBuilder GraphBuilder,
FRDGUnorderedAccessView UAV,
const FMemsetResourceParams Params 
)

◆ MemsetResource() [4/4]

template<typename ResourceType >
void MemsetResource ( FRHICommandList RHICmdList,
const ResourceType &  DstBuffer,
const FMemsetResourceParams Params 
)

◆ MemsetResource< FRWBufferStructured >()

◆ MemsetResource< FRWByteAddressBuffer >()

◆ ResizeBufferIfNeeded() [1/2]

FRDGBuffer * ResizeBufferIfNeeded ( FRDGBuilder GraphBuilder,
TRefCountPtr< FRDGPooledBuffer > &  ExternalBuffer,
const FRDGBufferDesc BufferDesc,
const TCHAR Name 
)

◆ ResizeBufferIfNeeded() [2/2]

FRDGBuffer * ResizeBufferIfNeeded ( FRDGBuilder GraphBuilder,
TRefCountPtr< FRDGPooledBuffer > &  ExternalBuffer,
EPixelFormat  Format,
uint32  NumElements,
const TCHAR Name 
)

◆ ResizeByteAddressBufferIfNeeded()

FRDGBuffer * ResizeByteAddressBufferIfNeeded ( FRDGBuilder GraphBuilder,
TRefCountPtr< FRDGPooledBuffer > &  ExternalBuffer,
uint32  NumBytes,
const TCHAR Name 
)

◆ ResizeResourceIfNeeded() [1/4]

RENDERCORE_API bool ResizeResourceIfNeeded ( FRDGBuilder GraphBuilder,
FRWBuffer Buffer,
EPixelFormat  Format,
uint32  NumElements,
const TCHAR DebugName 
)

◆ ResizeResourceIfNeeded() [2/4]

RENDERCORE_API bool ResizeResourceIfNeeded ( FRDGBuilder GraphBuilder,
FRWBufferStructured Buffer,
uint32  NumBytes,
const TCHAR DebugName 
)

◆ ResizeResourceIfNeeded() [3/4]

RENDERCORE_API bool ResizeResourceIfNeeded ( FRDGBuilder GraphBuilder,
FRWByteAddressBuffer Buffer,
uint32  NumBytes,
const TCHAR DebugName 
)

◆ ResizeResourceIfNeeded() [4/4]

RENDERCORE_API bool ResizeResourceIfNeeded ( FRHICommandList RHICmdList,
FRWBuffer Buffer,
EPixelFormat  Format,
uint32  NumElements,
const TCHAR DebugName 
)

◆ ResizeResourceIfNeeded< FRWBufferStructured >()

template<>
RENDERCORE_API bool ResizeResourceIfNeeded< FRWBufferStructured > ( FRHICommandList RHICmdList,
FRWBufferStructured Buffer,
uint32  NumBytes,
const TCHAR DebugName 
)

◆ ResizeResourceIfNeeded< FRWByteAddressBuffer >()

template<>
RENDERCORE_API bool ResizeResourceIfNeeded< FRWByteAddressBuffer > ( FRHICommandList RHICmdList,
FRWByteAddressBuffer Buffer,
uint32  NumBytes,
const TCHAR DebugName 
)

◆ ResizeResourceSOAIfNeeded() [1/2]

RENDERCORE_API bool ResizeResourceSOAIfNeeded ( FRDGBuilder GraphBuilder,
FRWBufferStructured Buffer,
const FResizeResourceSOAParams Params,
const TCHAR DebugName 
)

This version will resize/allocate the buffer at once and add a RDG pass to perform the copy on the RDG time-line if there was previous data).

◆ ResizeResourceSOAIfNeeded() [2/2]

RENDERCORE_API bool ResizeResourceSOAIfNeeded ( FRHICommandList RHICmdList,
FRWBufferStructured Buffer,
const FResizeResourceSOAParams Params,
const TCHAR DebugName 
)

◆ ResizeStructuredBufferIfNeeded()

FRDGBuffer * ResizeStructuredBufferIfNeeded ( FRDGBuilder GraphBuilder,
TRefCountPtr< FRDGPooledBuffer > &  ExternalBuffer,
uint32  NumBytes,
const TCHAR Name 
)

◆ ResizeStructuredBufferSOAIfNeeded()

FRDGBuffer * ResizeStructuredBufferSOAIfNeeded ( FRDGBuilder GraphBuilder,
TRefCountPtr< FRDGPooledBuffer > &  ExternalBuffer,
const FResizeResourceSOAParams Params,
const TCHAR Name 
)

◆ ScatterCopyResource() [1/3]

void ScatterCopyResource ( FRDGBuilder GraphBuilder,
FRDGBuffer DstResource,
FRDGBufferSRV ScatterBufferSRV,
FRDGBufferSRV UploadBufferSRV,
const FAsyncScatterCopyParams Params 
)

◆ ScatterCopyResource() [2/3]

void ScatterCopyResource ( FRDGBuilder GraphBuilder,
FRDGBuffer DstResource,
FRDGBufferSRV ScatterBufferSRV,
FRDGBufferSRV UploadBufferSRV,
const FScatterCopyParams Params 
)

◆ ScatterCopyResource() [3/3]

void ScatterCopyResource ( FRDGBuilder GraphBuilder,
FRDGViewableResource DstResource,
FRDGBufferSRV ScatterBufferSRV,
FRDGBufferSRV UploadBufferSRV,
const FScatterCopyParams Params 
)