Files
UnrealEngineUWP/Engine/Source/Runtime/RenderCore/Private/ShaderParameterMetadataBuilder.cpp
Stu McKenna f707c92be7 - Move ShaderParameterMetadataBuilder into RenderCore
#rb zach.bethel, jeremy.moore
#jira none
#rnx
#preflight 626ad0f4a5009ff191bb6bf6

[CL 19969680 by Stu McKenna in ue5-main branch]
2022-04-28 17:33:51 -04:00

173 lines
4.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ShaderParameterMetadataBuilder.h"
void FShaderParametersMetadataBuilder::AddReferencedStruct(
const TCHAR* Name,
const FShaderParametersMetadata* StructMetadata,
EShaderPrecisionModifier::Type Precision
)
{
NextMemberOffset = Align(NextMemberOffset, SHADER_PARAMETER_STRUCT_ALIGNMENT);
new(Members) FShaderParametersMetadata::FMember(
Name,
StructMetadata->GetStructTypeName(),
__LINE__,
NextMemberOffset,
UBMT_REFERENCED_STRUCT,
Precision,
1,
1,
0,
StructMetadata
);
NextMemberOffset += Align(StructMetadata->GetSize(), SHADER_PARAMETER_STRUCT_ALIGNMENT);
}
uint32 FShaderParametersMetadataBuilder::AddNestedStruct(
const TCHAR* Name,
const FShaderParametersMetadata* StructMetadata,
EShaderPrecisionModifier::Type Precision /* = EShaderPrecisionModifier::Float */
)
{
NextMemberOffset = Align(NextMemberOffset, SHADER_PARAMETER_STRUCT_ALIGNMENT);
const uint32 ThisMemberOffset = NextMemberOffset;
new(Members) FShaderParametersMetadata::FMember(
Name,
TEXT(""),
__LINE__,
NextMemberOffset,
UBMT_NESTED_STRUCT,
Precision,
1,
1,
0,
StructMetadata
);
NextMemberOffset += Align(StructMetadata->GetSize(), SHADER_PARAMETER_STRUCT_ALIGNMENT);
return ThisMemberOffset;
}
void FShaderParametersMetadataBuilder::AddBufferSRV(
const TCHAR* Name,
const TCHAR* ShaderType,
EShaderPrecisionModifier::Type Precision /* = EShaderPrecisionModifier::Float */
)
{
NextMemberOffset = Align(NextMemberOffset, SHADER_PARAMETER_POINTER_ALIGNMENT);
new(Members) FShaderParametersMetadata::FMember(
Name,
ShaderType,
__LINE__,
NextMemberOffset,
UBMT_SRV,
Precision,
TShaderResourceParameterTypeInfo<FRHIShaderResourceView*>::NumRows,
TShaderResourceParameterTypeInfo<FRHIShaderResourceView*>::NumColumns,
TShaderResourceParameterTypeInfo<FRHIShaderResourceView*>::NumElements,
TShaderResourceParameterTypeInfo<FRHIShaderResourceView*>::GetStructMetadata()
);
NextMemberOffset += SHADER_PARAMETER_POINTER_ALIGNMENT;
}
void FShaderParametersMetadataBuilder::AddBufferUAV(
const TCHAR* Name,
const TCHAR* ShaderType,
EShaderPrecisionModifier::Type Precision /* = EShaderPrecisionModifier::Float */
)
{
NextMemberOffset = Align(NextMemberOffset, SHADER_PARAMETER_POINTER_ALIGNMENT);
new(Members) FShaderParametersMetadata::FMember(
Name,
ShaderType,
__LINE__,
NextMemberOffset,
UBMT_UAV,
Precision,
TShaderResourceParameterTypeInfo<FRHIUnorderedAccessView*>::NumRows,
TShaderResourceParameterTypeInfo<FRHIUnorderedAccessView*>::NumColumns,
TShaderResourceParameterTypeInfo<FRHIUnorderedAccessView*>::NumElements,
TShaderResourceParameterTypeInfo<FRHIUnorderedAccessView*>::GetStructMetadata()
);
NextMemberOffset += SHADER_PARAMETER_POINTER_ALIGNMENT;
}
void FShaderParametersMetadataBuilder::AddRDGBufferSRV(
const TCHAR* Name,
const TCHAR* ShaderType,
EShaderPrecisionModifier::Type Precision /* = EShaderPrecisionModifier::Float */
)
{
NextMemberOffset = Align(NextMemberOffset, SHADER_PARAMETER_POINTER_ALIGNMENT);
new(Members) FShaderParametersMetadata::FMember(
Name,
ShaderType,
__LINE__,
NextMemberOffset,
UBMT_RDG_BUFFER_SRV,
Precision,
TShaderResourceParameterTypeInfo<FRDGBufferSRV*>::NumRows,
TShaderResourceParameterTypeInfo<FRDGBufferSRV*>::NumColumns,
TShaderResourceParameterTypeInfo<FRDGBufferSRV*>::NumElements,
TShaderResourceParameterTypeInfo<FRDGBufferSRV*>::GetStructMetadata()
);
NextMemberOffset += SHADER_PARAMETER_POINTER_ALIGNMENT;
}
void FShaderParametersMetadataBuilder::AddRDGBufferUAV(
const TCHAR* Name,
const TCHAR* ShaderType,
EShaderPrecisionModifier::Type Precision /* = EShaderPrecisionModifier::Float */
)
{
NextMemberOffset = Align(NextMemberOffset, SHADER_PARAMETER_POINTER_ALIGNMENT);
new(Members) FShaderParametersMetadata::FMember(
Name,
ShaderType,
__LINE__,
NextMemberOffset,
UBMT_RDG_BUFFER_UAV,
Precision,
TShaderResourceParameterTypeInfo<FRDGBufferUAV*>::NumRows,
TShaderResourceParameterTypeInfo<FRDGBufferUAV*>::NumColumns,
TShaderResourceParameterTypeInfo<FRDGBufferUAV*>::NumElements,
TShaderResourceParameterTypeInfo<FRDGBufferUAV*>::GetStructMetadata()
);
NextMemberOffset += SHADER_PARAMETER_POINTER_ALIGNMENT;
}
FShaderParametersMetadata* FShaderParametersMetadataBuilder::Build(
FShaderParametersMetadata::EUseCase UseCase,
const TCHAR* ShaderParameterName
)
{
const uint32 StructSize = Align(NextMemberOffset, SHADER_PARAMETER_STRUCT_ALIGNMENT);
FShaderParametersMetadata* ShaderParameterMetadata = new FShaderParametersMetadata(
UseCase,
EUniformBufferBindingFlags::Shader,
ShaderParameterName,
ShaderParameterName,
nullptr,
nullptr,
__FILE__,
__LINE__,
StructSize,
Members
);
return ShaderParameterMetadata;
}