// 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::NumRows, TShaderResourceParameterTypeInfo::NumColumns, TShaderResourceParameterTypeInfo::NumElements, TShaderResourceParameterTypeInfo::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::NumRows, TShaderResourceParameterTypeInfo::NumColumns, TShaderResourceParameterTypeInfo::NumElements, TShaderResourceParameterTypeInfo::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::NumRows, TShaderResourceParameterTypeInfo::NumColumns, TShaderResourceParameterTypeInfo::NumElements, TShaderResourceParameterTypeInfo::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::NumRows, TShaderResourceParameterTypeInfo::NumColumns, TShaderResourceParameterTypeInfo::NumElements, TShaderResourceParameterTypeInfo::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; }