UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
D3D12Residency.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 D3D12Residency.h: D3D memory residency functions.
5=============================================================================*/
6
7#pragma once
8
9#include "D3D12RHI.h" // For ENABLE_RESIDENCY_MANAGEMENT
10
11#if !defined(D3D12_PLATFORM_NEEDS_RESIDENCY_MANAGEMENT)
12 #define D3D12_PLATFORM_NEEDS_RESIDENCY_MANAGEMENT 1
13#endif
14
15#if !(D3D12_PLATFORM_NEEDS_RESIDENCY_MANAGEMENT)
16static_assert(ENABLE_RESIDENCY_MANAGEMENT == 0, "This platform doesn't need memory residency management. Please disable it.");
17namespace D3DX12Residency
18{
19 class ManagedObject {};
20 class ResidencySet {};
21 class ResidencyManager {};
22
23 class IDXGIAdapter3;
24}
25#else
26#include "D3D12Util.h"
29
31#pragma warning(push)
32#pragma warning(disable: 6031)
33 #include <D3DX12Residency.h>
34#pragma warning(pop)
36
39#endif
40
41#if ENABLE_RESIDENCY_MANAGEMENT
43#endif
44
45struct FD3D12ResidencyHandle : public D3DX12Residency::ManagedObject
46{
47#if DO_CHECK
48 class FD3D12GPUObject* GPUObject = nullptr;
49#endif
50};
51
52namespace D3DX12Residency
53{
54#if ENABLE_RESIDENCY_MANAGEMENT
55 inline void Initialize(FD3D12ResidencyHandle& Object, ID3D12Pageable* pResource, uint64 ObjectSize, class FD3D12GPUObject* GPUObject)
56 {
58 {
59#if DO_CHECK
60 Object.GPUObject = GPUObject;
61#endif
62 Object.Initialize(pResource, ObjectSize);
63 }
64 }
65#endif
66
68 {
69#if ENABLE_RESIDENCY_MANAGEMENT
70 return GEnableResidencyManagement && Object.IsInitialized();
71#else
72 return false;
73#endif
74 }
75
77 {
78#if ENABLE_RESIDENCY_MANAGEMENT
80#else
81 return false;
82#endif
83 }
84
85 inline void BeginTrackingObject(ResidencyManager& ResidencyManager, FD3D12ResidencyHandle& Object)
86 {
87#if ENABLE_RESIDENCY_MANAGEMENT
89 {
90 ResidencyManager.BeginTrackingObject(&Object);
91 }
92#endif
93 }
94
95 inline void EndTrackingObject(ResidencyManager& ResidencyManager, FD3D12ResidencyHandle& Object)
96 {
97#if ENABLE_RESIDENCY_MANAGEMENT
99 {
100 ResidencyManager.EndTrackingObject(&Object);
101 }
102#endif
103 }
104
105#if ENABLE_RESIDENCY_MANAGEMENT
106 inline void InitializeResidencyManager(ResidencyManager& ResidencyManager, ID3D12Device* Device, uint32 GPUIndex, IDXGIAdapter3* Adapter, uint32 MaxLatency)
107 {
109 {
110 VERIFYD3D12RESULT(ResidencyManager.Initialize(Device, GPUIndex, Adapter, MaxLatency));
111 }
112 }
113#endif
114
115 inline void DestroyResidencyManager(ResidencyManager& ResidencyManager)
116 {
117#if ENABLE_RESIDENCY_MANAGEMENT
119 {
120 ResidencyManager.Destroy();
121 }
122#endif
123 }
124
125 inline ResidencySet* CreateResidencySet(ResidencyManager& ResidencyManager)
126 {
127#if ENABLE_RESIDENCY_MANAGEMENT
128 return GEnableResidencyManagement ? ResidencyManager.CreateResidencySet() : nullptr;
129#else
130 return nullptr;
131#endif
132 }
133
134 inline void DestroyResidencySet(ResidencyManager& ResidencyManager, ResidencySet* pSet)
135 {
136#if ENABLE_RESIDENCY_MANAGEMENT
138 {
139 ResidencyManager.DestroyResidencySet(pSet);
140 }
141#endif
142 }
143
144 inline void Open(ResidencySet* pSet)
145 {
146#if ENABLE_RESIDENCY_MANAGEMENT
148 {
149 VERIFYD3D12RESULT(pSet->Open());
150 }
151#endif
152 }
153
154 inline void Close(ResidencySet* pSet)
155 {
156#if ENABLE_RESIDENCY_MANAGEMENT
158 {
159 VERIFYD3D12RESULT(pSet->Close());
160 }
161#endif
162 }
163
164 inline void Insert(ResidencySet& Set, FD3D12ResidencyHandle& Object)
165 {
166#if ENABLE_RESIDENCY_MANAGEMENT
168 {
169 check(Object.IsInitialized());
170 Set.Insert(&Object);
171 }
172#endif
173 }
174
175 inline void Insert(ResidencySet& Set, FD3D12ResidencyHandle* pObject)
176 {
177#if ENABLE_RESIDENCY_MANAGEMENT
179 {
180 check(pObject && pObject->IsInitialized());
181 Set.Insert(pObject);
182 }
183#endif
184 }
185}
186
187typedef D3DX12Residency::ResidencySet FD3D12ResidencySet;
188typedef D3DX12Residency::ResidencyManager FD3D12ResidencyManager;
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
D3DX12Residency::ResidencyManager FD3D12ResidencyManager
Definition D3D12Residency.h:188
D3DX12Residency::ResidencySet FD3D12ResidencySet
Definition D3D12Residency.h:187
#define VERIFYD3D12RESULT(x)
Definition D3D12Util.h:43
JsonWriter Close()
#define THIRD_PARTY_INCLUDES_START
Definition GenericPlatformCompilerPreSetup.h:63
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition D3D12RHICommon.h:100
Definition D3D12CommandList.h:26
void DestroyResidencyManager(ResidencyManager &ResidencyManager)
Definition D3D12Residency.h:115
void Insert(ResidencySet &Set, FD3D12ResidencyHandle &Object)
Definition D3D12Residency.h:164
void EndTrackingObject(ResidencyManager &ResidencyManager, FD3D12ResidencyHandle &Object)
Definition D3D12Residency.h:95
ResidencySet * CreateResidencySet(ResidencyManager &ResidencyManager)
Definition D3D12Residency.h:125
void DestroyResidencySet(ResidencyManager &ResidencyManager, ResidencySet *pSet)
Definition D3D12Residency.h:134
void BeginTrackingObject(ResidencyManager &ResidencyManager, FD3D12ResidencyHandle &Object)
Definition D3D12Residency.h:85
Definition Voronoi.cpp:10
Definition D3D12Residency.h:46