58 lines
1.5 KiB
C
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));
|
|
}
|