UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RHICoreBufferInitializer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "RHICore.h"
8#include "RHICommandList.h"
10
11namespace UE::RHICore
12{
13 // Buffer initializer that just returns the buffer on finalize.
31
32 // Buffer initializer that calls Lock on creation and Unlock on finalize.
34 {
37 RHICmdList,
38 Buffer,
39 RHICmdList.LockBuffer(Buffer, 0, Buffer->GetDesc().Size, RLM_WriteOnly),
40 Buffer->GetDesc().Size,
42 {
43 RHICmdList.UnlockBuffer(Buffer);
44 return MoveTemp(Buffer);
45 })
46 {
47 }
48 };
49
50 // Buffer initializer with custom implementation. This type is necessary for access to the FRHIBufferInitializer protected constructor.
58
60 {
61 public:
63 : FRHIBuffer(CreateDesc)
64 {
65 }
66 };
67
68 static FRHIBufferInitializer HandleUnknownBufferInitializerInitAction(FRHICommandListBase& RHICmdList, const FRHIBufferCreateDesc& CreateDesc)
69 {
70 UE_LOG(LogRHICore, Fatal, TEXT("Unknown or unhandled ERHIBufferInitAction: %d"), static_cast<uint32>(CreateDesc.InitAction));
71
72 FInvalidBuffer* Buffer = new FInvalidBuffer(CreateDesc);
74 }
75
76 // Create a buffer initializer for a unified memory platform. Any init actions not handled before here will use default implementations.
77 static FRHIBufferInitializer CreateUnifiedMemoryBufferInitializer(
78 FRHICommandListBase& RHICmdList
79 , const FRHIBufferCreateDesc& CreateDesc
81 , void* WritableData
82 )
83 {
85 {
86 // Use the default buffer implementation, so just return the buffer on finalize.
88 }
89
91 {
92 // Write the data from the resource array immediately, discard the resource array and then return the buffer on finalize.
93 check(CreateDesc.InitialData);
94
95 FMemory::Memcpy(WritableData, CreateDesc.InitialData->GetResourceData(), CreateDesc.InitialData->GetResourceDataSize());
96
97 // Discard the resource array's contents.
98 CreateDesc.InitialData->Discard();
99
101 }
102
104 {
105 // Zero memory immediately and return the buffer on finalize
106 FMemory::Memzero(WritableData, CreateDesc.Size);
108 }
109
110 // Let the caller fill in the writable data.
112 {
113 return UE::RHICore::FDefaultBufferInitializer(RHICmdList, Buffer, WritableData, CreateDesc.Size);
114 }
115
116 return UE::RHICore::HandleUnknownBufferInitializerInitAction(RHICmdList, CreateDesc);
117 }
118}
#define check(expr)
Definition AssertionMacros.h:314
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
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
@ RLM_WriteOnly
Definition RHIDefinitions.h:787
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Size
Definition VulkanMemory.cpp:4034
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHIResources.h:1581
Definition RHICommandList.h:455
void UnlockBuffer(FRHIBuffer *Buffer)
Definition RHICommandList.h:755
Definition RefCounting.h:454
Definition RHICoreBufferInitializer.h:60
FInvalidBuffer(const FRHIBufferCreateDesc &CreateDesc)
Definition RHICoreBufferInitializer.h:62
Definition RHIResources.h:819
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition RHIResources.h:1417
FResourceArrayUploadInterface * InitialData
Definition RHIResources.h:1562
ERHIBufferInitAction InitAction
Definition RHIResources.h:1568
uint32 Size
Definition RHIResources.h:1323
Definition RHIBufferInitializer.h:12
FRHIBuffer * Buffer
Definition RHIBufferInitializer.h:99
virtual uint32 GetResourceDataSize() const =0
virtual const void * GetResourceData() const =0
Definition RHICoreBufferInitializer.h:52
FCustomBufferInitializer(FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer, void *InWritableData, uint64 InWritableSize, FFinalizeCallback &&Func)
Definition RHICoreBufferInitializer.h:53
Definition RHICoreBufferInitializer.h:15
FDefaultBufferInitializer(FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer)
Definition RHICoreBufferInitializer.h:26
FDefaultBufferInitializer(FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer, void *InWritableData, uint64 InWritableSize)
Definition RHICoreBufferInitializer.h:16
Definition RHICoreBufferInitializer.h:34
FLockBufferInitializer(FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer)
Definition RHICoreBufferInitializer.h:35