UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RHIUniformBufferDataShared.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6
7namespace UE::RHICore
8{
10 {
13
14 template<typename TResourceOut>
16 {
17 return *reinterpret_cast<const TResourceOut*>(Data + InResource.MemberOffset);
18 }
19
20 const uint8* Data;
21 };
22
24 {
25 switch (Resource.MemberType)
26 {
27 case UBMT_TEXTURE:
28 {
29 FRHITexture* Texture = Reader.Read<FRHITexture*>(Resource);
31 }
32 break;
33 case UBMT_SRV:
34 {
35 FRHIShaderResourceView* ShaderResourceView = Reader.Read<FRHIShaderResourceView*>(Resource);
36 return ShaderResourceView ? ShaderResourceView->GetBindlessHandle() : FRHIDescriptorHandle();
37 }
38 break;
39 case UBMT_SAMPLER:
40 {
43 }
44 break;
46 {
49 }
50 break;
52 {
53 FRDGTexture* RDGTexture = Reader.Read<FRDGTexture*>(Resource);
54 FRHITexture* Texture = RDGTexture ? RDGTexture->GetRHI() : nullptr;
56 }
57 break;
61 {
65
66 FRHIShaderResourceView* ShaderResourceView = RDGShaderResourceView ? RDGShaderResourceView->GetRHI() : nullptr;
67 return ShaderResourceView ? ShaderResourceView->GetBindlessHandle() : FRHIDescriptorHandle();
68 }
69 break;
70 case UBMT_UAV:
71 {
72 FRHIUnorderedAccessView* UnorderedAccessView = Reader.Read<FRHIUnorderedAccessView*>(Resource);
73 return UnorderedAccessView ? UnorderedAccessView->GetBindlessHandle() : FRHIDescriptorHandle();
74 }
75 break;
78 {
80 FRHIUnorderedAccessView* UnorderedAccessView = RDGUnorderedAccessView ? RDGUnorderedAccessView->GetRHI() : nullptr;
81 return UnorderedAccessView ? UnorderedAccessView->GetBindlessHandle() : FRHIDescriptorHandle();
82 }
83 break;
84
85 default:
86 // Do nothing.
87 break;
88 }
89 return FRHIDescriptorHandle();
90 }
91
92 inline void UpdateUniformBufferConstants(void* DestinationData, const void* SourceData, const FRHIUniformBufferLayout& Layout, bool bAllowBindless = true)
93 {
94 check(DestinationData != nullptr);
95 check(SourceData != nullptr);
96
97 // First copy wholesale
98 FMemory::Memcpy(DestinationData, SourceData, Layout.ConstantBufferSize);
99
100 if (bAllowBindless)
101 {
102 FUniformDataReader Reader(SourceData);
103
104 // Then copy indices over
105 for (const FRHIUniformBufferResource& Resource : Layout.Resources)
106 {
107 const FRHIDescriptorHandle Handle = GetBindlessResourceHandle(Reader, Resource);
108 if (Handle.IsValid())
109 {
110 const uint32 BindlessIndex = Handle.GetIndex();
111 FMemory::Memcpy(reinterpret_cast<uint8*>(DestinationData) + Resource.MemberOffset, &BindlessIndex, sizeof(BindlessIndex));
112 }
113 }
114 }
115 }
116}
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ UBMT_SRV
Definition RHIDefinitions.h:648
@ UBMT_UAV
Definition RHIDefinitions.h:649
@ UBMT_RDG_BUFFER_UAV
Definition RHIDefinitions.h:662
@ UBMT_RDG_TEXTURE_NON_PIXEL_SRV
Definition RHIDefinitions.h:657
@ UBMT_RESOURCE_COLLECTION
Definition RHIDefinitions.h:677
@ UBMT_RDG_TEXTURE
Definition RHIDefinitions.h:653
@ UBMT_RDG_TEXTURE_SRV
Definition RHIDefinitions.h:656
@ UBMT_RDG_BUFFER_SRV
Definition RHIDefinitions.h:661
@ UBMT_TEXTURE
Definition RHIDefinitions.h:647
@ UBMT_RDG_TEXTURE_UAV
Definition RHIDefinitions.h:658
@ UBMT_SAMPLER
Definition RHIDefinitions.h:650
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
virtual RENDERCORE_API void MarkResourceAsUsed()
The following methods may only be called during pass execution.
Definition RenderGraphResources.h:698
Definition RenderGraphResources.h:571
FRHITexture * GetRHI() const
The following methods may only be called during pass execution.
Definition RenderGraphResources.h:582
Definition RenderGraphResources.h:721
Definition RHIResourceCollection.h:46
virtual RHI_API FRHIDescriptorHandle GetBindlessHandle() const
Definition RHIResourceCollection.cpp:60
Definition RHIResources.h:671
virtual FRHIDescriptorHandle GetBindlessHandle() const
Definition RHIResources.h:675
Definition RHIResources.h:3304
Definition RHIResources.h:2153
virtual FRHIDescriptorHandle GetDefaultBindlessHandle() const
Definition RHIResources.h:2177
Definition RHIResources.h:3294
virtual FRHIDescriptorHandle GetBindlessHandle() const
Definition RHIResources.h:3249
Definition RHIResources.h:819
FRHIDescriptorHandle GetBindlessResourceHandle(FUniformDataReader Reader, const FRHIUniformBufferResource &Resource)
Definition RHIUniformBufferDataShared.h:23
void UpdateUniformBufferConstants(void *DestinationData, const void *SourceData, const FRHIUniformBufferLayout &Layout, bool bAllowBindless=true)
Definition RHIUniformBufferDataShared.h:92
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition RHIDefinitions.h:1401
Definition RHIResources.h:1150
Definition RHIResources.h:1129
EUniformBufferBaseType MemberType
Definition RHIResources.h:1134
Definition RHIUniformBufferDataShared.h:10
const TResourceOut & Read(const FRHIUniformBufferResource &InResource) const
Definition RHIUniformBufferDataShared.h:15
const uint8 * Data
Definition RHIUniformBufferDataShared.h:20
FUniformDataReader(const void *InData)
Definition RHIUniformBufferDataShared.h:12