Files
UnrealEngine/Engine/Source/Runtime/RHI/Public/RHIStrings.h
2025-05-18 13:04:45 +08:00

109 lines
4.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "HAL/Platform.h"
#include "RHIDefinitions.h"
class FName;
class FString;
enum class ERHIAccess : uint32;
enum class ERHIPipeline : uint8;
enum EShaderPlatform : uint16;
namespace ERHIFeatureLevel { enum Type : int; }
// helper to convert GRHIVendorId into a printable string, or "Unknown" if unknown.
RHI_API const TCHAR* RHIVendorIdToString();
// helper to convert VendorId into a printable string, or "Unknown" if unknown.
RHI_API const TCHAR* RHIVendorIdToString(EGpuVendorId VendorId);
/** Finds a corresponding ERHIFeatureLevel::Type given a string, or returns false if one could not be found. */
RHI_API bool GetFeatureLevelFromName(const FString& Name, ERHIFeatureLevel::Type& OutFeatureLevel);
/** Finds a corresponding ERHIFeatureLevel::Type given an FName, or returns false if one could not be found. */
RHI_API bool GetFeatureLevelFromName(FName Name, ERHIFeatureLevel::Type& OutFeatureLevel);
/** Creates a string for the given feature level. */
RHI_API void GetFeatureLevelName(ERHIFeatureLevel::Type InFeatureLevel, FString& OutName);
/** Creates an FName for the given feature level. */
RHI_API void GetFeatureLevelName(ERHIFeatureLevel::Type InFeatureLevel, FName& OutName);
/** Finds a corresponding ERHIBindlessConfiguration given a string, or returns false if one could not be found. */
RHI_API bool GetBindlessConfigurationFromString(FStringView InString, ERHIBindlessConfiguration& OutBindlessConfiguration);
/** Stringifies ERHIFeatureLevel */
RHI_API FString LexToString(ERHIFeatureLevel::Type Level);
RHI_API FName LegacyShaderPlatformToShaderFormat(EShaderPlatform Platform);
RHI_API EShaderPlatform ShaderFormatToLegacyShaderPlatform(FName ShaderFormat);
RHI_API FName ShaderPlatformToPlatformName(EShaderPlatform Platform);
/** Stringifies EShaderPlatform */
RHI_API FString LexToString(EShaderPlatform Platform, bool bError = true);
/** Stringifies ERHIDescriptorHeapType */
RHI_API const TCHAR* LexToString(ERHIDescriptorHeapType InHeapType);
/** Finds a corresponding ERHIShadingPath::Type given an FName, or returns false if one could not be found. */
RHI_API bool GetShadingPathFromName(FName Name, ERHIShadingPath::Type& OutShadingPath);
/** Creates a string for the given shading path. */
RHI_API void GetShadingPathName(ERHIShadingPath::Type InShadingPath, FString& OutName);
/** Creates an FName for the given shading path. */
RHI_API void GetShadingPathName(ERHIShadingPath::Type InShadingPath, FName& OutName);
/** Returns a string of friendly name bits for the buffer usage flags enum. */
RHI_API FString GetBufferUsageFlagsName(EBufferUsageFlags BufferUsage);
/** Returns a string of friendly name bits for the texture create flags enum. */
RHI_API FString GetTextureCreateFlagsName(ETextureCreateFlags TextureCreateFlags);
/** Returns a string of friendly name bits for the texture create flags enum. */
RHI_API const TCHAR* StringFromRHIResourceType(ERHIResourceType ResourceType);
RHI_API ERHIResourceType RHIResourceTypeFromString(const FString& InString);
RHI_API FString GetRHIAccessName(ERHIAccess Access);
RHI_API FString GetResourceTransitionFlagsName(EResourceTransitionFlags Flags);
RHI_API FString GetRHIPipelineName(ERHIPipeline Pipeline);
RHI_API const TCHAR* GetTextureDimensionString(ETextureDimension Dimension);
RHI_API const TCHAR* GetTextureCreateFlagString(ETextureCreateFlags TextureCreateFlag);
RHI_API const TCHAR* GetBufferUsageFlagString(EBufferUsageFlags BufferUsage);
RHI_API const TCHAR* GetUniformBufferBaseTypeString(EUniformBufferBaseType BaseType);
RHI_API const TCHAR* GetShaderCodeResourceBindingTypeName(EShaderCodeResourceBindingType BindingType);
// Needs to stay inline for shader formats which can't depend on the RHI module
inline const TCHAR* GetShaderFrequencyString(EShaderFrequency Frequency, bool bIncludePrefix = true)
{
const TCHAR* String = TEXT("SF_NumFrequencies");
switch (Frequency)
{
case SF_Vertex: String = TEXT("SF_Vertex"); break;
case SF_Mesh: String = TEXT("SF_Mesh"); break;
case SF_Amplification: String = TEXT("SF_Amplification"); break;
case SF_Geometry: String = TEXT("SF_Geometry"); break;
case SF_Pixel: String = TEXT("SF_Pixel"); break;
case SF_Compute: String = TEXT("SF_Compute"); break;
case SF_RayGen: String = TEXT("SF_RayGen"); break;
case SF_RayMiss: String = TEXT("SF_RayMiss"); break;
case SF_RayHitGroup: String = TEXT("SF_RayHitGroup"); break;
case SF_RayCallable: String = TEXT("SF_RayCallable"); break;
case SF_WorkGraphRoot: String = TEXT("SF_WorkGraphRoot"); break;
case SF_WorkGraphComputeNode: String = TEXT("SF_WorkGraphComputeNode"); break;
default:
break;
}
// Skip SF_
int32 Index = bIncludePrefix ? 0 : 3;
String += Index;
return String;
}