UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RHIShaderBindingLayout.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "Misc/Optional.h"
8#include "RHIDefinitions.h"
9
10/*
11* FRHIUniformBufferShaderBindingLayout contains data on how a uniform buffer is used in a FRHIShaderBindingLayout
12*/
14{
15 FString LayoutName;
16 union
17 {
18 struct
19 {
25 };
27 };
28
30
37
39 {
40 return LayoutName == Other.LayoutName &&
41 Flags == Other.Flags;
42 }
43
45 {
46 Ar << F.LayoutName;
47 Ar << F.Flags;
48 return Ar;
49 }
50};
51
53{
54 None = 0,
55 AllowMeshShaders = 1 << 0,
56 InputAssembler = 1 << 1,
57 BindlessResources = 1 << 2,
58 BindlessSamplers = 1 << 3,
59 RootConstants = 1 << 4,
61};
63
64
65/*
66* FRHIShaderBindingLayout contains data which is used during shader generation to build the shareable shader resource tables between multiple shaders.
67* All shaders using the same FRHIShaderBindingLayout only have to bind the uniform buffers declared one at runtime. The shaders can have different PSOs
68* but they will define the resources of the uniform buffers at a specific resource index or SRT offset.
69* FRHIShaderBindingLayout is also used at runtime to know how/where the resources of the uniform buffers need to be bound.
70*/
72{
73public:
74
75 enum
76 {
77 MaxUniformBufferEntries = 8,
78 };
79
81
83 {
84 NumUniformBufferEntries = InUniformBufferEntries.Num();
85 check(NumUniformBufferEntries < MaxUniformBufferEntries);
86 for (uint32 Index = 0; Index < NumUniformBufferEntries; ++Index)
87 {
88 UniformBufferEntries[Index] = InUniformBufferEntries[Index];
89 }
90
92 }
93
94 uint32 GetHash() const { return Hash; }
96 uint32 GetNumUniformBufferEntries() const { return NumUniformBufferEntries; }
97 const FRHIUniformBufferShaderBindingLayout& GetUniformBufferEntry(uint32 Index) const { check(Index < NumUniformBufferEntries); return UniformBufferEntries[Index]; }
98
99 const FRHIUniformBufferShaderBindingLayout* FindEntry(const FString& LayoutName) const
100 {
101 for (const FRHIUniformBufferShaderBindingLayout& Entry : UniformBufferEntries)
102 {
103 if (Entry.LayoutName == LayoutName)
104 {
105 return &Entry;
106 }
107 }
108
109 return nullptr;
110 }
111
113 {
114 return Desc.Hash;
115 }
116
118 {
119 return Hash == Other.Hash &&
120 Flags == Other.Flags &&
121 NumUniformBufferEntries == Other.NumUniformBufferEntries &&
122 UniformBufferEntries == Other.UniformBufferEntries;
123 }
124
126 {
127 Ar << F.Hash;
128 Ar << F.Flags;
129 Ar << F.NumUniformBufferEntries;
130 Ar << F.UniformBufferEntries;
131 return Ar;
132 }
133
134private:
135
136 void ComputeHash()
137 {
138 Hash = HashCombineFast(Hash, GetTypeHash(Flags));
139 Hash = HashCombineFast(Hash, GetTypeHash(NumUniformBufferEntries));
140 Hash = HashCombineFast(Hash, GetTypeHash(UniformBufferEntries));
141 }
142
143 uint32 Hash = 0;
145 uint32 NumUniformBufferEntries = 0;
147};
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
uint64 ComputeHash(const FRHITextureCreateInfo &InCreateInfo, uint64 HeapOffset)
Definition RHICoreTransientResourceAllocator.h:15
EShaderBindingLayoutFlags
Definition RHIShaderBindingLayout.h:53
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition RHIShaderBindingLayout.h:72
EShaderBindingLayoutFlags GetFlags() const
Definition RHIShaderBindingLayout.h:95
FRHIShaderBindingLayout()=default
uint32 GetHash() const
Definition RHIShaderBindingLayout.h:94
uint32 GetNumUniformBufferEntries() const
Definition RHIShaderBindingLayout.h:96
friend uint32 GetTypeHash(const FRHIShaderBindingLayout &Desc)
Definition RHIShaderBindingLayout.h:112
FRHIShaderBindingLayout(EShaderBindingLayoutFlags InFlags, TConstArrayView< FRHIUniformBufferShaderBindingLayout > InUniformBufferEntries)
Definition RHIShaderBindingLayout.h:82
const FRHIUniformBufferShaderBindingLayout & GetUniformBufferEntry(uint32 Index) const
Definition RHIShaderBindingLayout.h:97
bool operator==(const FRHIShaderBindingLayout &Other) const
Definition RHIShaderBindingLayout.h:117
const FRHIUniformBufferShaderBindingLayout * FindEntry(const FString &LayoutName) const
Definition RHIShaderBindingLayout.h:99
Definition StaticArray.h:26
U16 Index
Definition radfft.cpp:71
Definition RHIShaderBindingLayout.h:14
friend uint32 GetTypeHash(const FRHIUniformBufferShaderBindingLayout &Entry)
Definition RHIShaderBindingLayout.h:31
FRHIUniformBufferShaderBindingLayout()
Definition RHIShaderBindingLayout.h:29
uint32 BaseSRVResourceIndex
Definition RHIShaderBindingLayout.h:22
uint32 CBVResourceIndex
Definition RHIShaderBindingLayout.h:21
friend FArchive & operator<<(FArchive &Ar, FRHIUniformBufferShaderBindingLayout &F)
Definition RHIShaderBindingLayout.h:44
FString LayoutName
Definition RHIShaderBindingLayout.h:15
uint32 RegisterSpace
Definition RHIShaderBindingLayout.h:20
uint32 BaseSamplerResourceIndex
Definition RHIShaderBindingLayout.h:24
uint32 Flags
Definition RHIShaderBindingLayout.h:26
bool operator==(const FRHIUniformBufferShaderBindingLayout &Other) const
Definition RHIShaderBindingLayout.h:38
uint32 BaseUAVResourceIndex
Definition RHIShaderBindingLayout.h:23