UsageType
UsageType
#Overview
name: UsageType
The value of this variable can be defined or overridden in .ini config files. 1
.ini config file referencing this setting variable.
It is referenced in 26
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of UsageType is to define the specific context or usage scenario for a particular setting or component within the Unreal Engine 5 codebase. It appears to be used across multiple subsystems and plugins to determine how resources should be configured or processed based on their intended use. Here’s a breakdown of the key points:
-
Subsystems and plugins that rely on this variable:
- Studio Telemetry plugin
- Niagara particle system
- HairStrands rendering system
- VectorVM (Vector Virtual Machine)
-
The value of this variable is typically set in configuration files or through code, depending on the specific subsystem.
-
It often interacts with other variables related to resource allocation, rendering settings, or processing logic.
-
Developers should be aware that:
- The UsageType can affect how resources are allocated and processed.
- Different subsystems may have their own specific UsageType enumerations or definitions.
- Incorrect usage types may lead to inefficient resource allocation or incorrect behavior.
-
Best practices when using this variable:
- Ensure the correct UsageType is set for the intended scenario (e.g., Editor, Server, Client, or Program).
- Be consistent with UsageType across related components to avoid conflicts.
- When developing new features, consider how the UsageType might affect resource allocation and processing.
The UsageType variable is a critical component in optimizing resource usage and ensuring correct behavior across different contexts within the Unreal Engine 5 ecosystem. It allows for fine-grained control over how various subsystems and plugins operate based on their intended use case.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEngine.ini:3579, section: [StudioTelemetry.Log]
- INI Section:
StudioTelemetry.Log
- Raw value:
Editor
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Experimental/StudioTelemetry/Source/StudioTelemetry/Private/AnalyticsProviderMulticast.cpp:41
Scope (from outer to inner):
file
function FAnalyticsProviderMulticast::FAnalyticsProviderMulticast
Source code excerpt:
ProviderSection = SectionName;
FString UsageType;
// Validate the usage type is for this build type
if (GConfig->GetString(*ProviderSection, TEXT("UsageType"), UsageType, GEngineIni))
{
#if WITH_EDITOR
// Must specify a Editor usage type for this type build
if (UsageType.Find(TEXT("Editor")) == INDEX_NONE)
{
continue;
}
#elif WITH_SERVER_CODE
// Must specify a Server usage type for this type build
if (UsageType.Find(TEXT("Server")) == INDEX_NONE)
{
continue;
}
#else
// Must specify a Client or Program usage type for this type build
if (UsageType.Find(TEXT("Program")) == INDEX_NONE && UsageType.Find(TEXT("Client")) == INDEX_NONE)
{
continue;
}
#endif
}
else
#Loc: <Workspace>/Engine/Plugins/Experimental/StudioTelemetry/Source/StudioTelemetry/Private/AnalyticsProviderMulticast.h:16
Scope: file
Source code excerpt:
* Name=LogAnalytics
* ProviderModule=AnalyticsLog
* UsageType=Editor
*
* This instructs the Multicast provider to create a Provider from the AnalyticsLog module via the IANalyticsProviderModule interface.
* See FAnalayticsLog and FAnalyticsProviderLog for more details.
*/
class FAnalyticsProviderMulticast : public IAnalyticsProvider
{
public:
using TProviders = TMap<FString, TSharedPtr<IAnalyticsProvider>>;
typedef TFunction<void(const FString& EventName, const TArray<FAnalyticsEventAttribute>& Attrs)> OnRecordEvent;
FAnalyticsProviderMulticast();
static TSharedPtr<FAnalyticsProviderMulticast> CreateAnalyticsProvider();
virtual bool StartSession(const TArray<FAnalyticsEventAttribute>& Attributes = {}) override;
virtual void EndSession() override;
virtual void FlushEvents() override;
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraGraph.cpp:173
Scope (from outer to inner):
file
function FNiagaraGraphScriptUsageInfo::FNiagaraGraphScriptUsageInfo
Source code excerpt:
}
FNiagaraGraphScriptUsageInfo::FNiagaraGraphScriptUsageInfo() : UsageType(ENiagaraScriptUsage::Function)
{
}
void FNiagaraGraphScriptUsageInfo::PostLoad(UObject* Owner)
{
const int32 NiagaraVer = Owner->GetLinkerCustomVersion(FNiagaraCustomVersion::GUID);
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraGraph.cpp:1555
Scope (from outer to inner):
file
function FNiagaraCompileHash UNiagaraGraph::GetCompileReferencedDataHash
Source code excerpt:
for (int32 i = 0; i < CachedUsageInfo.Num(); i++)
{
if (UNiagaraScript::IsEquivalentUsage(CachedUsageInfo[i].UsageType, InUsage) && CachedUsageInfo[i].UsageId == InUsageId)
{
return CachedUsageInfo[i].ReferenceHashFromGraph;
}
}
return FNiagaraCompileHash();
}
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraGraph.cpp:1567
Scope (from outer to inner):
file
function FNiagaraCompileHash UNiagaraGraph::GetCompileDataHash
Source code excerpt:
for (int32 i = 0; i < CachedUsageInfo.Num(); i++)
{
if (UNiagaraScript::IsEquivalentUsage(CachedUsageInfo[i].UsageType, InUsage) && CachedUsageInfo[i].UsageId == InUsageId)
{
if (GNiagaraUseGraphHash <= 0)
{
return CachedUsageInfo[i].CompileHash;
}
else
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraGraph.cpp:1586
Scope (from outer to inner):
file
function FGuid UNiagaraGraph::GetBaseId
Source code excerpt:
for (int32 i = 0; i < CachedUsageInfo.Num(); i++)
{
if (UNiagaraScript::IsEquivalentUsage(CachedUsageInfo[i].UsageType, InUsage) && CachedUsageInfo[i].UsageId == InUsageId)
{
return CachedUsageInfo[i].BaseId;
}
}
return FGuid();
}
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraGraph.cpp:1598
Scope (from outer to inner):
file
function void UNiagaraGraph::ForceBaseId
lambda-function
Source code excerpt:
FNiagaraGraphScriptUsageInfo* MatchingCachedUsageInfo = CachedUsageInfo.FindByPredicate([InUsage, InUsageId](const FNiagaraGraphScriptUsageInfo& CachedUsageInfoItem)
{
return CachedUsageInfoItem.UsageType == InUsage && CachedUsageInfoItem.UsageId == InUsageId;
});
if (MatchingCachedUsageInfo == nullptr)
{
MatchingCachedUsageInfo = &CachedUsageInfo.AddDefaulted_GetRef();
MatchingCachedUsageInfo->UsageType = InUsage;
MatchingCachedUsageInfo->UsageId = InUsageId;
}
MatchingCachedUsageInfo->BaseId = InForcedBaseId;
}
UEdGraphPin* UNiagaraGraph::FindParameterMapDefaultValuePin(const FName VariableName, ENiagaraScriptUsage InUsage, ENiagaraScriptUsage InParentUsage) const
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraGraph.cpp:3500
Scope (from outer to inner):
file
function void UNiagaraGraph::RebuildCachedCompileIds
Source code excerpt:
{
UNiagaraNodeOutput* OutputNode = NiagaraOutputNodes[i];
NewUsageCache[i].UsageType = OutputNode->GetUsage();
NewUsageCache[i].UsageId = OutputNode->GetUsageId();
BuildTraversal(MutableView(NewUsageCache[i].Traversal), OutputNode);
int32 FoundMatchIdx = INDEX_NONE;
for (int32 j = 0; j < CachedUsageInfo.Num(); j++)
{
if (UNiagaraScript::IsEquivalentUsage(CachedUsageInfo[j].UsageType, NewUsageCache[i].UsageType) && CachedUsageInfo[j].UsageId == NewUsageCache[i].UsageId)
{
FoundMatchIdx = j;
break;
}
}
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraGraph.cpp:3610
Scope (from outer to inner):
file
function void UNiagaraGraph::RebuildCachedCompileIds
Source code excerpt:
}
if (UNiagaraScript::IsEquivalentUsage(NewUsageCache[i].UsageType, ENiagaraScriptUsage::ParticleSpawnScript) && NewUsageCache[i].UsageId == FGuid())
{
ParticleSpawnUsageInfo = &NewUsageCache[i];
}
if (UNiagaraScript::IsEquivalentUsage(NewUsageCache[i].UsageType, ENiagaraScriptUsage::ParticleUpdateScript) && NewUsageCache[i].UsageId == FGuid())
{
ParticleUpdateUsageInfo = &NewUsageCache[i];
}
}
if (ParticleSpawnUsageInfo != nullptr && ParticleUpdateUsageInfo != nullptr)
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraGraph.cpp:3625
Scope (from outer to inner):
file
function void UNiagaraGraph::RebuildCachedCompileIds
Source code excerpt:
// If we have info for both spawn and update generate the gpu version too.
FNiagaraGraphScriptUsageInfo GpuUsageInfo;
GpuUsageInfo.UsageType = ENiagaraScriptUsage::ParticleGPUComputeScript;
GpuUsageInfo.UsageId = FGuid();
FNiagaraGraphScriptUsageInfo* OldGpuInfo = CachedUsageInfo.FindByPredicate(
[](const FNiagaraGraphScriptUsageInfo& OldInfo) { return OldInfo.UsageType == ENiagaraScriptUsage::ParticleGPUComputeScript && OldInfo.UsageId == FGuid(); });
if (OldGpuInfo == nullptr || OldGpuInfo->BaseId.IsValid() == false)
{
GpuUsageInfo.BaseId = FGuid::NewGuid();
}
else
{
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/NiagaraGraph.cpp:3772
Scope (from outer to inner):
file
function void UNiagaraGraph::GatherExternalDependencyData
Source code excerpt:
{
// First add our direct dependency chain...
if (UNiagaraScript::IsEquivalentUsage(CachedUsageInfo[i].UsageType, InUsage) && CachedUsageInfo[i].UsageId == InUsageId)
{
for (UNiagaraNode* Node : CachedUsageInfo[i].Traversal)
{
Node->GatherExternalDependencyData(InUsage, InUsageId, HashCollector);
}
}
// Now add any other dependency chains that we might have...
else if (UNiagaraScript::IsUsageDependentOn(InUsage, CachedUsageInfo[i].UsageType))
{
if (GNiagaraUseGraphHash == 1)
{
HashCollector.AddHash(CachedUsageInfo[i].CompileHashFromGraph, CachedUsageInfo[i].Traversal.Last()->GetPathName());
}
else
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Public/NiagaraGraph.h:93
Scope: file
Source code excerpt:
/** The context in which this sub-graph traversal will be used.*/
UPROPERTY()
ENiagaraScriptUsage UsageType;
/** The particular instance of the usage type. Event scripts, for example, have potentially multiple graphs.*/
UPROPERTY()
FGuid UsageId;
/** The hash that we calculated last traversal. */
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:245
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateVertexBufferRDG_FromBulkData
Source code excerpt:
template<typename FormatType>
FRDGBufferRef InternalCreateVertexBufferRDG_FromBulkData(FRDGBuilder& GraphBuilder, FByteBulkData& InBulkData, uint32 InDataCount, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType)
{
const FRDGBufferDesc Desc = ApplyUsage(FRDGBufferDesc::CreateBufferDesc(FormatType::SizeInByte, InDataCount), UsageType);
return InternalCreateBufferRDG_FromBulkData(GraphBuilder, InBulkData, Out, FormatType::Format, Desc, DebugName, OwnerName);
}
template<typename FormatType>
FRDGBufferRef InternalCreateStructuredBufferRDG_FromBulkData(FRDGBuilder& GraphBuilder, FByteBulkData& InBulkData, uint32 InDataCount, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType)
{
const FRDGBufferDesc Desc = ApplyUsage(FRDGBufferDesc::CreateStructuredDesc(FormatType::SizeInByte, InDataCount), UsageType);
return InternalCreateBufferRDG_FromBulkData(GraphBuilder, InBulkData, Out, PF_Unknown, Desc, DebugName, OwnerName);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// HairBulkData loading
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:429
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateVertexBufferRDG_FromHairBulkData
Source code excerpt:
template<typename FormatType>
FRDGBufferRef InternalCreateVertexBufferRDG_FromHairBulkData(FRDGBuilder& GraphBuilder, FHairBulkContainer& InChunk, uint32 InDataCount, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType)
{
// Fallback for non-streamble resources (e.g. guides)
if (InChunk.ChunkRequest == nullptr)
{
return InternalCreateVertexBufferRDG_FromBulkData<FormatType>(GraphBuilder, InChunk.Data, InDataCount, Out, DebugName, OwnerName, UsageType);
}
const FRDGBufferRef In = Out.Buffer ? Register(GraphBuilder, Out, ERDGImportedBufferFlags::None).Buffer : nullptr;
const FRDGBufferDesc BufferDesc = ApplyUsage(FRDGBufferDesc::CreateBufferDesc(FormatType::SizeInByte, FMath::DivideAndRoundUp(InChunk.ChunkRequest->TotalSize, FormatType::SizeInByte)), UsageType);
const FRDGBufferDesc UploadDesc = ApplyUsage(FRDGBufferDesc::CreateBufferDesc(FormatType::SizeInByte, FMath::DivideAndRoundUp(InChunk.ChunkRequest->Size, FormatType::SizeInByte)), UsageType);
if (BufferDesc.GetSize() == 0) { Out.Buffer = nullptr; return nullptr; }
if (UploadDesc.GetSize()==0) { return nullptr; }
if (FRDGBufferRef Buffer = InternalCreateBufferRDG_FromHairBulkData(GraphBuilder, InChunk, In, BufferDesc, UploadDesc, DebugName, OwnerName))
{
ConvertToExternalBufferWithViews(GraphBuilder, Buffer, Out, FormatType::Format);
return Buffer;
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:451
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateStructuredBufferRDG_FromHairBulkData
Source code excerpt:
template<typename FormatType>
FRDGBufferRef InternalCreateStructuredBufferRDG_FromHairBulkData(FRDGBuilder& GraphBuilder, FHairBulkContainer& InChunk, uint32 InDataCount, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType)
{
// Fallback for non-streamble resources (e.g. guides)
if (InChunk.ChunkRequest == nullptr)
{
return InternalCreateStructuredBufferRDG_FromBulkData<FormatType>(GraphBuilder, InChunk.Data, InDataCount, Out, DebugName, OwnerName, UsageType);
}
const FRDGBufferRef In = Out.Buffer ? Register(GraphBuilder, Out, ERDGImportedBufferFlags::None).Buffer : nullptr;
const FRDGBufferDesc BufferDesc = ApplyUsage(FRDGBufferDesc::CreateStructuredDesc(FormatType::SizeInByte, FMath::DivideAndRoundUp(InChunk.ChunkRequest->TotalSize, FormatType::SizeInByte)), UsageType);
const FRDGBufferDesc UploadDesc = ApplyUsage(FRDGBufferDesc::CreateStructuredDesc(FormatType::SizeInByte, FMath::DivideAndRoundUp(InChunk.ChunkRequest->Size, FormatType::SizeInByte)), UsageType);
if (BufferDesc.GetSize() == 0) { Out.Buffer = nullptr; return nullptr; }
if (UploadDesc.GetSize()==0) { return nullptr; }
if (FRDGBufferRef Buffer = InternalCreateBufferRDG_FromHairBulkData(GraphBuilder, InChunk, In, BufferDesc, UploadDesc, DebugName, OwnerName))
{
ConvertToExternalBufferWithViews(GraphBuilder, Buffer, Out);
return Buffer;
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:472
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateByteAddressBufferRDG_FromHairBulkData
Source code excerpt:
}
FRDGBufferRef InternalCreateByteAddressBufferRDG_FromHairBulkData(FRDGBuilder& GraphBuilder, FHairBulkContainer& InHairBulkContainer, FRDGExternalBuffer& OutExternal, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType, FHairTranscoding InTranscoding = FHairTranscoding())
{
FHairStreamingRequest::FChunk* Chunk = InHairBulkContainer.ChunkRequest;
FByteBulkData* BulkData = &InHairBulkContainer.Data;
// Fallback for non-streamble resources (e.g. guides, cards guides, ...)
if (Chunk == nullptr)
{
const FRDGBufferDesc Desc = ApplyUsage(FRDGBufferDesc::CreateByteAddressDesc(BulkData->GetBulkDataSize()), UsageType);
//return InternalCreateBufferRDG_FromBulkData(GraphBuilder, LocalBulkData, Out, PF_Unknown, Desc, DebugName, OwnerName);
InternalSetBulkDataFlags(*BulkData);
const uint32 DataSizeInBytes = Desc.GetSize();
check(BulkData->GetBulkDataSize() >= DataSizeInBytes);
if (DataSizeInBytes == 0)
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:517
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateByteAddressBufferRDG_FromHairBulkData
Source code excerpt:
const uint32 BufferTotalSizeInBytes = InTranscoding.bEnabled ? InTranscoding.UncompressedTotalSizeInBytes : Chunk->TotalSize;
const FRDGBufferRef In = OutExternal.Buffer ? Register(GraphBuilder, OutExternal, ERDGImportedBufferFlags::None).Buffer : nullptr;
const FRDGBufferDesc BufferDesc = ApplyUsage(FRDGBufferDesc::CreateByteAddressDesc(BufferTotalSizeInBytes), UsageType);
const FRDGBufferDesc UploadDesc = ApplyUsage(FRDGBufferDesc::CreateByteAddressDesc(Chunk->Size), UsageType);
if (BufferDesc.GetSize()==0) { OutExternal.Buffer = nullptr; return nullptr; }
if (UploadDesc.GetSize()==0) { return nullptr; }
const bool bDeallocate = In != nullptr && Chunk->Status == FHairStreamingRequest::FChunk::EStatus::Unloading;
const bool bUploadData = Chunk->Size > 0;
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:588
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateVertexBufferRDG
Source code excerpt:
template<typename FormatType>
FRDGBufferRef InternalCreateVertexBufferRDG(FRDGBuilder& GraphBuilder, const typename FormatType::Type* InData, uint32 InDataCount, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType, ERDGInitialDataFlags InitialDataFlags)
{
const uint32 DataSizeInBytes = FormatType::SizeInByte * InDataCount;
if (DataSizeInBytes == 0)
{
Out.Buffer = nullptr;
return nullptr;
}
const FRDGBufferDesc Desc = ApplyUsage(FRDGBufferDesc::CreateBufferDesc(FormatType::SizeInByte, InDataCount), UsageType);
FRDGBufferRef Buffer = InternalCreateVertexBuffer(
GraphBuilder,
DebugName,
Desc,
InData,
DataSizeInBytes,
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:612
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateVertexBufferRDG
Source code excerpt:
template<typename FormatType>
FRDGBufferRef InternalCreateVertexBufferRDG(FRDGBuilder& GraphBuilder, const TArray<typename FormatType::Type>& InData, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType, ERDGInitialDataFlags InitialDataFlags=ERDGInitialDataFlags::NoCopy)
{
const uint32 DataCount = InData.Num();
const uint32 DataSizeInBytes = FormatType::SizeInByte * DataCount;
if (DataSizeInBytes == 0)
{
Out.Buffer = nullptr;
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:622
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateVertexBufferRDG
Source code excerpt:
}
const FRDGBufferDesc Desc = ApplyUsage(FRDGBufferDesc::CreateBufferDesc(FormatType::SizeInByte, InData.Num()), UsageType);
FRDGBufferRef Buffer = InternalCreateVertexBuffer(
GraphBuilder,
DebugName,
Desc,
InData.GetData(),
DataSizeInBytes,
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:637
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateVertexBufferRDG
Source code excerpt:
template<typename DataType>
FRDGBufferRef InternalCreateVertexBufferRDG(FRDGBuilder& GraphBuilder, const TArray<DataType>& InData, EPixelFormat Format, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType, ERDGInitialDataFlags InitialDataFlags=ERDGInitialDataFlags::NoCopy)
{
const uint32 DataCount = InData.Num();
const uint32 DataSizeInBytes = sizeof(DataType) * DataCount;
if (DataSizeInBytes == 0)
{
Out.Buffer = nullptr;
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:647
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateVertexBufferRDG
Source code excerpt:
}
const FRDGBufferDesc Desc = ApplyUsage(FRDGBufferDesc::CreateBufferDesc(sizeof(DataType), InData.Num()), UsageType);
FRDGBufferRef Buffer = InternalCreateVertexBuffer(
GraphBuilder,
DebugName,
Desc,
InData.GetData(),
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:715
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateStructuredBufferRDG
Source code excerpt:
template<typename DataType>
FRDGBufferRef InternalCreateStructuredBufferRDG(FRDGBuilder& GraphBuilder, const TArray<DataType>& InData, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType, ERDGInitialDataFlags InitialDataFlags)
{
const uint32 DataCount = InData.Num();
const uint32 DataSizeInBytes = sizeof(DataType) * DataCount;
if (DataSizeInBytes == 0)
{
Out.Buffer = nullptr;
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:732
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateByteAddressBufferRDG
Source code excerpt:
template<typename DataType>
FRDGBufferRef InternalCreateByteAddressBufferRDG(FRDGBuilder& GraphBuilder, const TArray<DataType>& InData, EPixelFormat Format, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType)
{
const uint32 DataCount = InData.Num();
const uint32 DataSizeInBytes = sizeof(DataType) * DataCount;
Out.Buffer = nullptr;
if (DataSizeInBytes != 0)
{
const FRDGBufferDesc Desc = ApplyUsage(FRDGBufferDesc::CreateByteAddressDesc(DataSizeInBytes), UsageType);
FRDGBufferRef Buffer = GraphBuilder.CreateBuffer(Desc, DebugName, ERDGBufferFlags::MultiFrame);
Buffer->SetOwnerName(OwnerName);
if (InData.GetData() && DataSizeInBytes)
{
GraphBuilder.QueueBufferUpload(Buffer, InData.GetData(), DataSizeInBytes, ERDGInitialDataFlags::None);
}
#Loc: <Workspace>/Engine/Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomResources.cpp:753
Scope (from outer to inner):
file
function FRDGBufferRef InternalCreateByteAddressBufferRDG
Source code excerpt:
}
FRDGBufferRef InternalCreateByteAddressBufferRDG(FRDGBuilder& GraphBuilder, uint64 DataSizeInBytes, FRDGExternalBuffer& Out, const TCHAR* DebugName, const FName& OwnerName, EHairResourceUsageType UsageType)
{
Out.Buffer = nullptr;
if (DataSizeInBytes != 0)
{
const FRDGBufferDesc Desc = ApplyUsage(FRDGBufferDesc::CreateByteAddressDesc(DataSizeInBytes), UsageType);
FRDGBufferRef Buffer = GraphBuilder.CreateBuffer(Desc, DebugName, ERDGBufferFlags::MultiFrame);
Buffer->SetOwnerName(OwnerName);
ConvertToExternalBufferWithViews(GraphBuilder, Buffer, Out, PF_Unknown);
return Buffer;
}
return nullptr;
#Loc: <Workspace>/Engine/Source/Runtime/VectorVM/Private/VectorVMExperimentalSerialization.cpp:147
Scope: file
Source code excerpt:
*** Serialization stuff for the Experimental VM
*********************************************************************************************************************************************************************************************************************************/
#define VVM_OP_XM(OpCode, Cat, NumInputs, NumOutputs, Prefix, UsageType, ...) NumInputs,
static const uint8 VVM_OP_NUM_INPUTS[] = {
VVM_OP_XM_LIST
};
#undef VVM_OP_XM
#define VVM_OP_XM(OpCode, Cat, NumInputs, NumOutputs, Prefix, UsageType, ...) NumOutputs,
static const uint8 VVM_OP_NUM_OUTPUTS[] = {
VVM_OP_XM_LIST
};
#undef VVM_OP_XM
#define VVM_OP_XM(OpCode, Cat, NumInputs, NumOutputs, Prefix, UsageType, ...) UsageType,
static const uint8 VVM_OP_REG_USAGE_TYPE[] = {
VVM_OP_XM_LIST
};
#undef VVM_OP_XM
#define VVMSer_batchStart(...)