You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Avoid allocating stats buffer if stats accumulation is not enabled.
#rb ola.olsson #preflight 615491e94cfdcf000195594d #lockdown michal.valient #ROBOMERGE-AUTHOR: andrew.lauritzen #ROBOMERGE-SOURCE: CL 17666373 via CL 17965814 #ROBOMERGE-BOT: (v895-18170469) [CL 18365909 by andrew lauritzen in 5.0 branch]
This commit is contained in:
@@ -288,22 +288,23 @@ void FVirtualShadowMapArrayCacheManager::ExtractStats(FRDGBuilder& GraphBuilder,
|
||||
FRDGBufferRef AccumulatedStatsBufferRDG = nullptr;
|
||||
|
||||
// Note: stats accumulation thing is here because it needs to persist over frames.
|
||||
if (!AccumulatedStatsBuffer.IsValid())
|
||||
{
|
||||
FRDGBufferDesc Desc = FRDGBufferDesc::CreateBufferDesc(4, 1 + FVirtualShadowMapArray::NumStats * MaxStatFrames);
|
||||
Desc.Usage = EBufferUsageFlags(Desc.Usage | BUF_SourceCopy);
|
||||
|
||||
AccumulatedStatsBufferRDG = GraphBuilder.CreateBuffer(Desc, TEXT("Shadow.Virtual.AccumulatedStatsBuffer")); // TODO: Can't be a structured buffer as EnqueueCopy is only defined for vertex buffers
|
||||
AddClearUAVPass(GraphBuilder, GraphBuilder.CreateUAV(AccumulatedStatsBufferRDG, PF_R32_UINT), 0);
|
||||
AccumulatedStatsBuffer = GraphBuilder.ConvertToExternalBuffer(AccumulatedStatsBufferRDG);
|
||||
}
|
||||
else
|
||||
if (AccumulatedStatsBuffer.IsValid())
|
||||
{
|
||||
AccumulatedStatsBufferRDG = GraphBuilder.RegisterExternalBuffer(AccumulatedStatsBuffer, TEXT("Shadow.Virtual.AccumulatedStatsBuffer"));
|
||||
}
|
||||
|
||||
if (IsAccumulatingStats())
|
||||
{
|
||||
if (!AccumulatedStatsBuffer.IsValid())
|
||||
{
|
||||
FRDGBufferDesc Desc = FRDGBufferDesc::CreateBufferDesc(4, 1 + FVirtualShadowMapArray::NumStats * MaxStatFrames);
|
||||
Desc.Usage = EBufferUsageFlags(Desc.Usage | BUF_SourceCopy);
|
||||
|
||||
AccumulatedStatsBufferRDG = GraphBuilder.CreateBuffer(Desc, TEXT("Shadow.Virtual.AccumulatedStatsBuffer")); // TODO: Can't be a structured buffer as EnqueueCopy is only defined for vertex buffers
|
||||
AddClearUAVPass(GraphBuilder, GraphBuilder.CreateUAV(AccumulatedStatsBufferRDG, PF_R32_UINT), 0);
|
||||
AccumulatedStatsBuffer = GraphBuilder.ConvertToExternalBuffer(AccumulatedStatsBufferRDG);
|
||||
}
|
||||
|
||||
// Initialize/clear
|
||||
if (!bAccumulatingStats)
|
||||
{
|
||||
@@ -331,9 +332,13 @@ void FVirtualShadowMapArrayCacheManager::ExtractStats(FRDGBuilder& GraphBuilder,
|
||||
{
|
||||
bAccumulatingStats = false;
|
||||
|
||||
GPUBufferReadback = new FRHIGPUBufferReadback(TEXT("Shadow.Virtual.AccumulatedStatsBuffer"));
|
||||
GPUBufferReadback = new FRHIGPUBufferReadback(TEXT("Shadow.Virtual.AccumulatedStatsBufferReadback"));
|
||||
AddEnqueueCopyPass(GraphBuilder, GPUBufferReadback, AccumulatedStatsBufferRDG, 0u);
|
||||
}
|
||||
else if (AccumulatedStatsBuffer.IsValid())
|
||||
{
|
||||
AccumulatedStatsBuffer.SafeRelease();
|
||||
}
|
||||
|
||||
if (GPUBufferReadback && GPUBufferReadback->IsReady())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user