You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#rb zach.bethel, jeremy.moore #jira none #rnx #preflight 626ad0f4a5009ff191bb6bf6 [CL 19969680 by Stu McKenna in ue5-main branch]
173 lines
4.7 KiB
C++
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;
|
|
}
|