vault backup: 2024-02-06 10:30:09
This commit is contained in:
parent
ce621781e3
commit
bd415a90d1
@ -6,4 +6,158 @@ tags:
|
|||||||
rating: ⭐
|
rating: ⭐
|
||||||
---
|
---
|
||||||
# 前言
|
# 前言
|
||||||
https://www.cnblogs.com/timlly/p/15092257.html
|
原文地址:https://www.cnblogs.com/timlly/p/15092257.html
|
||||||
|
|
||||||
|
|
||||||
|
# FShader
|
||||||
|
```c++
|
||||||
|
class FShader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// 在编译触发之前修改编译环境参数, 可由子类覆盖.
|
||||||
|
static void ModifyCompilationEnvironment(const FShaderPermutationParameters&, FShaderCompilerEnvironment&) {}
|
||||||
|
|
||||||
|
// 是否需要编译指定的排列, 可由子类覆盖.
|
||||||
|
static bool ShouldCompilePermutation(const FShaderPermutationParameters&) { return true; }
|
||||||
|
|
||||||
|
// 检测编译结果是否有效, 可由子类覆盖.
|
||||||
|
static bool ValidateCompiledResult(EShaderPlatform InPlatform, const FShaderParameterMap& InParameterMap, TArray<FString>& OutError) { return true; }
|
||||||
|
|
||||||
|
// 取得RayTracingPayloadType
|
||||||
|
static ERayTracingPayloadType GetRayTracingPayloadType(const int32 PermutationId) { return static_cast<ERayTracingPayloadType>(0); }
|
||||||
|
|
||||||
|
// 获取各类数据的Hash的接口.
|
||||||
|
RENDERCORE_API const FSHAHash& GetHash() const;
|
||||||
|
RENDERCORE_API const FSHAHash& GetVertexFactoryHash() const;
|
||||||
|
RENDERCORE_API const FSHAHash& GetOutputHash() const;
|
||||||
|
|
||||||
|
/** Returns an identifier suitable for deterministic sorting of shaders between sessions. */
|
||||||
|
uint32 GetSortKey() const { return SortKey; }
|
||||||
|
// 保存并检测shader代码的编译结果.
|
||||||
|
RENDERCORE_API void Finalize(const FShaderMapResourceCode* Code);
|
||||||
|
|
||||||
|
// 数据获取接口.
|
||||||
|
inline FShaderType* GetType(const FShaderMapPointerTable& InPointerTable) const { return Type.Get(InPointerTable.ShaderTypes); }
|
||||||
|
inline FShaderType* GetType(const FPointerTableBase* InPointerTable) const { return Type.Get(InPointerTable); }
|
||||||
|
inline FVertexFactoryType* GetVertexFactoryType(const FShaderMapPointerTable& InPointerTable) const { return VFType.Get(InPointerTable.VFTypes); }
|
||||||
|
inline FVertexFactoryType* GetVertexFactoryType(const FPointerTableBase* InPointerTable) const { return VFType.Get(InPointerTable); }
|
||||||
|
inline FShaderType* GetTypeUnfrozen() const { return Type.GetUnfrozen(); }
|
||||||
|
inline int32 GetResourceIndex() const { checkSlow(ResourceIndex != INDEX_NONE); return ResourceIndex; }
|
||||||
|
inline EShaderPlatform GetShaderPlatform() const { return Target.GetPlatform(); }
|
||||||
|
inline EShaderFrequency GetFrequency() const { return Target.GetFrequency(); }
|
||||||
|
inline const FShaderTarget GetTarget() const { return Target; }
|
||||||
|
inline bool IsFrozen() const { return Type.IsFrozen(); }
|
||||||
|
inline uint32 GetNumInstructions() const { return NumInstructions; }
|
||||||
|
|
||||||
|
#if WITH_EDITORONLY_DATA
|
||||||
|
inline uint32 GetNumTextureSamplers() const { return NumTextureSamplers; }
|
||||||
|
inline uint32 GetCodeSize() const { return CodeSize; }
|
||||||
|
inline void SetNumInstructions(uint32 Value) { NumInstructions = Value; }
|
||||||
|
#else
|
||||||
|
inline uint32 GetNumTextureSamplers() const { return 0u; }
|
||||||
|
inline uint32 GetCodeSize() const { return 0u; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 尝试返回匹配指定类型的自动绑定的Uniform Buffer, 如果不存在则返回未绑定的.
|
||||||
|
template<typename UniformBufferStructType>
|
||||||
|
FORCEINLINE_DEBUGGABLE const TShaderUniformBufferParameter<UniformBufferStructType>& GetUniformBufferParameter() const
|
||||||
|
{
|
||||||
|
const FShaderUniformBufferParameter& FoundParameter = GetUniformBufferParameter(UniformBufferStructType::FTypeInfo::GetStructMetadata());
|
||||||
|
return static_cast<const TShaderUniformBufferParameter<UniformBufferStructType>&>(FoundParameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE_DEBUGGABLE const FShaderUniformBufferParameter& GetUniformBufferParameter(const FShaderParametersMetadata* SearchStruct) const
|
||||||
|
{
|
||||||
|
const FHashedName SearchName = SearchStruct->GetShaderVariableHashedName();
|
||||||
|
|
||||||
|
return GetUniformBufferParameter(SearchName);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE_DEBUGGABLE const FShaderUniformBufferParameter& GetUniformBufferParameter(const FHashedName SearchName) const
|
||||||
|
{
|
||||||
|
int32 FoundIndex = INDEX_NONE;
|
||||||
|
TArrayView<const FHashedName> UniformBufferParameterStructsView(UniformBufferParameterStructs);
|
||||||
|
for (int32 StructIndex = 0, Count = UniformBufferParameterStructsView.Num(); StructIndex < Count; StructIndex++)
|
||||||
|
{
|
||||||
|
if (UniformBufferParameterStructsView[StructIndex] == SearchName)
|
||||||
|
{
|
||||||
|
FoundIndex = StructIndex;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FoundIndex != INDEX_NONE)
|
||||||
|
{
|
||||||
|
const FShaderUniformBufferParameter& FoundParameter = UniformBufferParameters[FoundIndex];
|
||||||
|
return FoundParameter;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// This can happen if the uniform buffer was not bound
|
||||||
|
// There's no good way to distinguish not being bound due to temporary debugging / compiler optimizations or an actual code bug,
|
||||||
|
// Hence failing silently instead of an error message
|
||||||
|
static FShaderUniformBufferParameter UnboundParameter;
|
||||||
|
return UnboundParameter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RENDERCORE_API const FShaderParametersMetadata* FindAutomaticallyBoundUniformBufferStruct(int32 BaseIndex) const;
|
||||||
|
|
||||||
|
RENDERCORE_API void DumpDebugInfo(const FShaderMapPointerTable& InPtrTable);
|
||||||
|
|
||||||
|
#if WITH_EDITOR
|
||||||
|
RENDERCORE_API void SaveShaderStableKeys(const FShaderMapPointerTable& InPtrTable, EShaderPlatform TargetShaderPlatform, int32 PermutationId, const struct FStableShaderKeyAndValue& SaveKeyVal);
|
||||||
|
#endif // WITH_EDITOR
|
||||||
|
|
||||||
|
/** Returns the meta data for the root shader parameter struct. */
|
||||||
|
static inline const FShaderParametersMetadata* GetRootParametersMetadata()
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
RENDERCORE_API void BuildParameterMapInfo(const TMap<FString, FParameterAllocation>& ParameterMap);
|
||||||
|
|
||||||
|
public:
|
||||||
|
// 着色器参数绑定.
|
||||||
|
LAYOUT_FIELD(FShaderParameterBindings, Bindings);
|
||||||
|
// 着色器参数绑定的映射信息.
|
||||||
|
LAYOUT_FIELD(FShaderParameterMapInfo, ParameterMapInfo);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
LAYOUT_FIELD(TMemoryImageArray<FHashedName>, UniformBufferParameterStructs);
|
||||||
|
LAYOUT_FIELD(TMemoryImageArray<FShaderUniformBufferParameter>, UniformBufferParameters);
|
||||||
|
|
||||||
|
// 下面3个是编辑器参数.
|
||||||
|
// 着色器的编译输出和结果参数映射的哈希值, 用于查找匹配的资源.
|
||||||
|
LAYOUT_FIELD_EDITORONLY(FSHAHash, OutputHash);
|
||||||
|
// 顶点工厂资源哈希值
|
||||||
|
LAYOUT_FIELD_EDITORONLY(FSHAHash, VFSourceHash);
|
||||||
|
// Shader资源哈希值.
|
||||||
|
LAYOUT_FIELD_EDITORONLY(FSHAHash, SourceHash);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// 着色器类型.
|
||||||
|
LAYOUT_FIELD(TIndexedPtr<FShaderType>, Type);
|
||||||
|
// 顶点工厂类型.
|
||||||
|
LAYOUT_FIELD(TIndexedPtr<FVertexFactoryType>, VFType);
|
||||||
|
|
||||||
|
/** Target platform and frequency. */
|
||||||
|
LAYOUT_FIELD(FShaderTarget, Target);
|
||||||
|
|
||||||
|
/** Index of this shader within the FShaderMapResource */
|
||||||
|
LAYOUT_FIELD(int32, ResourceIndex);
|
||||||
|
|
||||||
|
/** The number of instructions the shader takes to execute. */
|
||||||
|
LAYOUT_FIELD(uint32, NumInstructions);
|
||||||
|
|
||||||
|
/** Truncated version of OutputHash, intended for sorting. Not suitable for unique shader identification. */
|
||||||
|
LAYOUT_FIELD(uint32, SortKey);
|
||||||
|
|
||||||
|
/** Number of texture samplers the shader uses. */
|
||||||
|
LAYOUT_FIELD_EDITORONLY(uint32, NumTextureSamplers);
|
||||||
|
|
||||||
|
/** Size of shader's compiled code */
|
||||||
|
LAYOUT_FIELD_EDITORONLY(uint32, CodeSize);
|
||||||
|
};
|
||||||
|
```
|
@ -6,7 +6,7 @@ tags:
|
|||||||
rating: ⭐
|
rating: ⭐
|
||||||
---
|
---
|
||||||
# 前言
|
# 前言
|
||||||
原文地址:https://www.cnblogs.com/timlly/p/15156626.html
|
原文地址:https://www.cnblogs.com/timlly/p/15156626.html
|
||||||
|
|
||||||
# 概念
|
# 概念
|
||||||
- FRenderResource:是渲染线程的渲染资源基础父类,实际的数据和逻辑由子类实现。可以认为是渲染线程中承载**CPU相关相关渲染的载体**。
|
- FRenderResource:是渲染线程的渲染资源基础父类,实际的数据和逻辑由子类实现。可以认为是渲染线程中承载**CPU相关相关渲染的载体**。
|
||||||
|
@ -6,7 +6,7 @@ tags:
|
|||||||
rating: ⭐
|
rating: ⭐
|
||||||
---
|
---
|
||||||
# 前言
|
# 前言
|
||||||
https://www.cnblogs.com/timlly/p/15217090.html
|
原文地址:https://www.cnblogs.com/timlly/p/15217090.html
|
||||||
|
|
||||||
# 概念
|
# 概念
|
||||||
- FRDGAllocator:简单的C++对象分配器, 用MemStack分配器追踪和销毁物体。
|
- FRDGAllocator:简单的C++对象分配器, 用MemStack分配器追踪和销毁物体。
|
||||||
|
@ -6,4 +6,4 @@ tags:
|
|||||||
rating: ⭐
|
rating: ⭐
|
||||||
---
|
---
|
||||||
# 前言
|
# 前言
|
||||||
https://www.cnblogs.com/timlly/p/16687324.html
|
原文地址:https://www.cnblogs.com/timlly/p/16687324.html
|
Loading…
x
Reference in New Issue
Block a user