Files
UnrealEngine/Engine/Source/Developer/ShaderPreprocessor/Private/PreprocessorPrivate.h
2025-05-18 13:04:45 +08:00

58 lines
1.5 KiB
C

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "ShaderCore.h"
#include "ShaderCompilerCore.h"
#include "ShaderPreprocessTypes.h"
enum class EMessageType
{
Error = 0,
Warn = 1,
ShaderMetaData = 2,
};
/**
* Filter preprocessor errors.
* @param ErrorMsg - The error message.
* @returns true if the message is valid and has not been filtered out.
*/
inline EMessageType FilterPreprocessorError(const FString& ErrorMsg)
{
const TCHAR* SubstringsToFilter[] =
{
TEXT("Unknown encoding:"),
TEXT("with no newline, supplemented newline"),
TEXT("Converted [CR+LF] to [LF]")
};
const int32 FilteredSubstringCount = UE_ARRAY_COUNT(SubstringsToFilter);
if (ErrorMsg.Contains(TEXT("UESHADERMETADATA")))
{
return EMessageType::ShaderMetaData;
}
for (int32 SubstringIndex = 0; SubstringIndex < FilteredSubstringCount; ++SubstringIndex)
{
if (ErrorMsg.Contains(SubstringsToFilter[SubstringIndex]))
{
return EMessageType::Warn;
}
}
return EMessageType::Error;
}
static void ExtractDirective(FString& OutString, FString WarningString)
{
static const FString PrefixString = TEXT("UESHADERMETADATA_");
uint32 DirectiveStartPosition = WarningString.Find(PrefixString) + PrefixString.Len();
uint32 DirectiveEndPosition = WarningString.Find(TEXT("\n"));
if (DirectiveEndPosition == INDEX_NONE)
{
DirectiveEndPosition = WarningString.Len();
}
OutString = WarningString.Mid(DirectiveStartPosition, (DirectiveEndPosition - DirectiveStartPosition));
}