Files
UnrealEngineUWP/Engine/Source/Runtime/RenderCore/Private/RenderGraphUtils.cpp
Thomas Sarkanen e5eb5adfbe Merging //UE4/Dev-Main to Dev-Anim (//UE4/Dev-Anim) @ CL 4643671
#rb none
#jira none

[CL 4644540 by Thomas Sarkanen in Dev-Anim branch]
2018-12-10 05:09:18 -05:00

52 lines
1.6 KiB
C++

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#include "RenderGraphUtils.h"
void ClearUnusedGraphResourcesImpl(const FShaderParameterBindings& ShaderBindings, const FShaderParametersMetadata* ParametersMetadata, void* InoutParameters)
{
int32 GraphTextureId = 0;
int32 GraphSRVId = 0;
int32 GraphUAVId = 0;
uint8* Base = reinterpret_cast<uint8*>(InoutParameters);
for (int32 ResourceIndex = 0, Num = ParametersMetadata->GetLayout().Resources.Num(); ResourceIndex < Num; ResourceIndex++)
{
EUniformBufferBaseType Type = EUniformBufferBaseType(ParametersMetadata->GetLayout().Resources[ResourceIndex]);
uint16 ByteOffset = ParametersMetadata->GetLayout().ResourceOffsets[ResourceIndex];
if (Type == UBMT_GRAPH_TRACKED_TEXTURE)
{
if (GraphTextureId < ShaderBindings.GraphTextures.Num() && ByteOffset == ShaderBindings.GraphTextures[GraphTextureId].ByteOffset)
{
GraphTextureId++;
continue;
}
}
else if (Type == UBMT_GRAPH_TRACKED_SRV || Type == UBMT_GRAPH_TRACKED_BUFFER_SRV)
{
if (GraphSRVId < ShaderBindings.GraphSRVs.Num() && ByteOffset == ShaderBindings.GraphSRVs[GraphSRVId].ByteOffset)
{
GraphSRVId++;
continue;
}
}
else if (Type == UBMT_GRAPH_TRACKED_UAV || Type == UBMT_GRAPH_TRACKED_BUFFER_UAV)
{
if (GraphUAVId < ShaderBindings.GraphUAVs.Num() && ByteOffset == ShaderBindings.GraphUAVs[GraphUAVId].ByteOffset)
{
GraphUAVId++;
continue;
}
}
else
{
continue;
}
void** ResourcePointerAddress = reinterpret_cast<void**>(Base + ByteOffset);
*ResourcePointerAddress = nullptr;
}
}