Files
UnrealEngine/Engine/Source/Runtime/RHI/Private/RHIBufferInitializer.cpp
2025-05-18 13:04:45 +08:00

38 lines
996 B
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "RHIBufferInitializer.h"
#include "RHICommandList.h"
FRHIBufferInitializer::FRHIBufferInitializer(FRHICommandListBase& RHICmdList, FRHIBuffer* InBuffer, void* InWritableData, uint64 InWritableSize, FRHIBufferInitializer::FFinalizeCallback&& InFinalizeCallback)
: FinalizeCallback(Forward<FFinalizeCallback>(InFinalizeCallback))
, CommandList(&RHICmdList)
, Buffer(InBuffer)
, WritableData(InWritableData)
, WritableSize(InWritableSize)
{
check(InBuffer != nullptr);
RHICmdList.AddPendingBufferUpload(InBuffer);
}
FBufferRHIRef FRHIBufferInitializer::Finalize()
{
FBufferRHIRef Result;
if (FinalizeCallback)
{
check(Buffer != nullptr);
FRHICommandListScopedPipelineGuard ScopedPipeline(*CommandList);
Result = FinalizeCallback(*CommandList);
RemovePendingBufferUpload();
Reset();
}
return Result;
}
void FRHIBufferInitializer::RemovePendingBufferUpload()
{
CommandList->RemovePendingBufferUpload(Buffer);
}