UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
D3D12Resources.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 D3D12Resources.h: D3D resource RHI definitions.
5 =============================================================================*/
6
7#pragma once
8
12#include "D3D12Residency.h"
14#include "D3D12State.h"
15#include "D3D12Util.h"
16#include "RHIPoolAllocator.h"
17#include "Templates/UniquePtr.h"
18
19// Forward Decls
21class FD3D12Resource;
31
32class FD3D12SyncPoint;
34
35#if D3D12_RHI_RAYTRACING
41#endif // D3D12_RHI_RAYTRACING
42
43#ifndef D3D12_WITH_CUSTOM_TEXTURE_LAYOUT
44#define D3D12_WITH_CUSTOM_TEXTURE_LAYOUT 0
45#endif
46
47#if D3D12_WITH_CUSTOM_TEXTURE_LAYOUT
48extern void ApplyCustomTextureLayout(FD3D12ResourceDesc& TextureLayout, FD3D12Adapter& Adapter);
49#endif
50
52{
53 Default, //< Decide if tracking is required based on flags
54 SingleState, //< Force disable state tracking of resource - resource will always be in the initial resource state
55 MultiState, //< Force enable state tracking of resource
56};
57
71
73{
74public:
77
78 inline ID3D12Heap* GetHeap() const { return Heap.GetReference(); }
79 void SetHeap(ID3D12Heap* HeapIn, const TCHAR* const InName, bool bTrack = true, bool bForceGetGPUAddress = false);
80
82 void DisallowTrackingResidency(); // Part of workaround for UE-174791 and UE-202367
83
84 void DeferDelete();
85
86 inline FName GetName() const { return HeapName; }
87 inline D3D12_HEAP_DESC GetHeapDesc() const { return HeapDesc; }
89 {
90#if ENABLE_RESIDENCY_MANAGEMENT
91 if (bRequiresResidencyTracking)
92 {
93 checkf(ResidencyHandle, TEXT("Resource requires residency tracking, but BeginTrackingResidency() was not called."));
94 return MakeArrayView(&ResidencyHandle, 1);
95 }
96 else
97#endif // ENABLE_RESIDENCY_MANAGEMENT
98 {
99 return {};
100 }
101 }
102 inline D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress() const { return GPUVirtualAddress; }
103 inline void SetIsTransient(bool bInIsTransient) { bIsTransient = bInIsTransient; }
104 inline bool GetIsTransient() const { return bIsTransient; }
105
106private:
107
109 FName HeapName;
110 bool bTrack = true;
111 D3D12_HEAP_DESC HeapDesc;
112 D3D12_GPU_VIRTUAL_ADDRESS GPUVirtualAddress = 0;
113 FD3D12ResidencyHandle* ResidencyHandle = nullptr; // Residency handle owned by this object
114 HeapId TraceHeapId;
115 HeapId TraceParentHeapId;
116 bool bIsTransient = false; // Whether this is a transient heap
117 bool bRequiresResidencyTracking = bool(ENABLE_RESIDENCY_MANAGEMENT);
118};
119
120
121// This can be used to guarantee that a struct's padding is zero, which is necessary for hashing in some cases
122// NOTE: classes with virtual methods are not supported. The struct must be the first declared base class
123// to ensure the correct ordering of the ctor calls
124template <typename T>
126{
128 {
129 FMemory::Memzero(this, sizeof(T));
130 }
131};
132
133struct FD3D12ResourceDesc : public TZeroedStruct<FD3D12ResourceDesc>, D3D12_RESOURCE_DESC
134{
141 , D3D12_RESOURCE_DESC(Other)
142 {
143 }
144
145 // TODO: use this type everywhere and disallow implicit conversion
146 /*explicit*/ FD3D12ResourceDesc(const D3D12_RESOURCE_DESC& Other)
148 , D3D12_RESOURCE_DESC(Other)
149 {
150 }
151
153
154 // PixelFormat for the Resource that aliases our current resource.
156
157#if D3D12RHI_NEEDS_VENDOR_EXTENSIONS
158 bool bRequires64BitAtomicSupport : 1 = false;
159#endif
160
161 bool bReservedResource : 1 = false;
162
163 bool bBackBuffer : 1 = false;
164
165 // External resources are owned by another application or middleware, not the Engine
166 bool bExternal : 1 = false;
167
168 // If we support the new format list casting, use the newer APIs; otherwise, fall back to our UAV Aliasing approach.
169#if D3D12RHI_SUPPORTS_UNCOMPRESSED_UAV
170 inline bool NeedsUAVAliasWorkarounds() const { return false; }
171 inline bool SupportsUncompressedUAV() const { return UAVPixelFormat != PF_Unknown; }
172
174#else
175 inline bool NeedsUAVAliasWorkarounds() const { return UAVPixelFormat != PF_Unknown; }
176 inline bool SupportsUncompressedUAV() const { return false; }
177#endif
178};
179
181{
182 friend class FD3D12Buffer;
183private:
186
187#if !D3D12RHI_SUPPORTS_UNCOMPRESSED_UAV
188 // Since certain formats cannot be aliased in D3D12, we create a placed UAV
189 // that aliases them. This resource description is used to create that UAV.
190 TUniquePtr<D3D12_RESOURCE_DESC> UAVAccessResourceDesc;
191#endif
192
193 FD3D12ResidencyHandle* ResidencyHandle = nullptr; // Residency handle owned by this object
194
195 D3D12_GPU_VIRTUAL_ADDRESS GPUVirtualAddress{};
196 void* ResourceBaseAddress{};
197
198#if NV_AFTERMATH
199 UE::RHICore::Nvidia::Aftermath::D3D12::FResource AftermathHandle{};
200#endif
201 const FD3D12ResourceDesc Desc;
202 ED3D12Access InitialD3D12Access = ED3D12Access::Unknown;
203 ED3D12Access DefaultD3D12Access = ED3D12Access::Unknown;
204#ifdef PLATFORM_SUPPORTS_RESOURCE_COMPRESSION
206#endif
207
208 D3D12_HEAP_TYPE HeapType;
209 FName DebugName;
210
211 int32 NumMapCalls = 0;
212 uint16 SubresourceCount{};
213 uint8 PlaneCount;
214 bool bRequiresResourceStateTracking : 1; //1st bit
215 bool bRequiresResidencyTracking : 1; //2nd bit
216 bool bDepthStencil : 1; //3rd bit
217 bool bDeferDelete : 1; //4th bit
218
219#if UE_BUILD_DEBUG
222#endif
223
224 struct FD3D12ReservedResourceData
225 {
227
228 // Flattened array of residency handles owned by backing heaps, used to support batched GetResidencyHandles()
229 TArray<FD3D12ResidencyHandle*> ResidencyHandles;
230 TArray<int32> NumResidencyHandlesPerHeap;
231
232 // Tiles currently assigned to the resource
233 uint32 NumCommittedTiles = 0;
234
235 // Available tiles at the end of the last backing heap
236 uint32 NumSlackTiles = 0;
237 };
238 TUniquePtr<FD3D12ReservedResourceData> ReservedResourceData;
239
240public:
241 FD3D12Resource() = delete;
247 FD3D12Heap* InHeap = nullptr,
249
259
260 virtual ~FD3D12Resource();
261
262 operator ID3D12Resource&() { return *Resource; }
263
264 ID3D12Resource* GetResource() const { return Resource.GetReference(); }
265
266#if !D3D12RHI_SUPPORTS_UNCOMPRESSED_UAV
267 const D3D12_RESOURCE_DESC* GetUAVAccessResourceDesc() const
268 {
269 return UAVAccessResourceDesc.Get();
270 }
271
272 void SetUAVAccessResourceDesc(const D3D12_RESOURCE_DESC& InUAVAccessResourceDesc)
273 {
275 }
276#endif
277
278 inline void* Map(const D3D12_RANGE* ReadRange = nullptr)
279 {
280 if (NumMapCalls == 0)
281 {
282 check(Resource);
283 check(ResourceBaseAddress == nullptr);
284 VERIFYD3D12RESULT(Resource->Map(0, ReadRange, &ResourceBaseAddress));
285 }
286 else
287 {
288 check(ResourceBaseAddress);
289 }
290 ++NumMapCalls;
291
292 return ResourceBaseAddress;
293 }
294
295 inline void Unmap()
296 {
297 check(Resource);
298 check(ResourceBaseAddress);
299 check(NumMapCalls > 0);
300
301 --NumMapCalls;
302 if (NumMapCalls == 0)
303 {
304 Resource->Unmap(0, nullptr);
305 ResourceBaseAddress = nullptr;
306 }
307 }
308
310 const FD3D12ResourceDesc& GetDesc() const { return Desc; }
311 D3D12_HEAP_TYPE GetHeapType() const { return HeapType; }
312 D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress() const { return GPUVirtualAddress; }
313 inline void SetGPUVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS Value) { GPUVirtualAddress = Value; }
314 void* GetResourceBaseAddress() const { check(ResourceBaseAddress); return ResourceBaseAddress; }
315 uint16 GetMipLevels() const { return Desc.MipLevels; }
316 uint16 GetArraySize() const { return (Desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D) ? 1 : Desc.DepthOrArraySize; }
317 uint8 GetPlaneCount() const { return PlaneCount; }
318 uint16 GetSubresourceCount() const { return SubresourceCount; }
319 ED3D12Access GetInitialAccess() const { return InitialD3D12Access; }
320 ED3D12Access GetDefaultAccess() const { return DefaultD3D12Access; }
321#ifdef PLATFORM_SUPPORTS_RESOURCE_COMPRESSION
324#endif
325 bool RequiresResourceStateTracking() const { return bRequiresResourceStateTracking; }
326
327 inline bool IsBackBuffer() const { return Desc.bBackBuffer; }
328
329 void SetName(const TCHAR* Name)
330 {
331 // Check name before setting it. Saves FName lookup and driver call. Names are frequently the same for pooled buffers
332 // that end up getting reused for the same purpose every frame (2/3 of calls to this function on a given frame).
333 if (DebugName != Name)
334 {
335 DebugName = FName(Name);
337 }
338 }
339
341 {
342 return DebugName;
343 }
344
346 {
347 bDeferDelete = false;
348 }
349
350 inline bool ShouldDeferDelete() const { return bDeferDelete; }
351 void DeferDelete();
352
353 inline bool IsReservedResource() const { return ReservedResourceData.IsValid(); }
354 inline bool IsPlacedResource() const { return Heap.GetReference() != nullptr; }
355 inline FD3D12Heap* GetHeap() const { return Heap; };
356 inline bool IsDepthStencilResource() const { return bDepthStencil; }
357
359 {
361 return ReservedResourceData->NumCommittedTiles * (uint64)GRHIGlobals.ReservedResources.TileSizeInBytes;
362 }
363
364 inline bool NeedsDeferredResidencyUpdate() const { return IsReservedResource(); }
365
367
368 bool IsResident() const
369 {
370#if ENABLE_RESIDENCY_MANAGEMENT
371
373 {
374 // We don't know the state because the set of residency handles is only known on the
375 // RHI Submission Thread and may change throughout the frame.
376 return true;
377 }
378
380 if (ResidencyHandles.IsEmpty())
381 {
382 // No residency tracking for this resource
383 return true;
384 }
385
386 // Treat resource as resident if at least one backing heap is resident.
387 // Technically we should return a partial residency status.
388 for (FD3D12ResidencyHandle* Handle : ResidencyHandles)
389 {
390 if (Handle->ResidencyStatus == FD3D12ResidencyHandle::RESIDENCY_STATUS::RESIDENT)
391 {
392 return true;
393 }
394 }
395 return false;
396#else // ENABLE_RESIDENCY_MANAGEMENT
397 return true;
398#endif // ENABLE_RESIDENCY_MANAGEMENT
399 }
400
402 {
403#if ENABLE_RESIDENCY_MANAGEMENT
404 if (!bRequiresResidencyTracking)
405 {
406 return {};
407 }
408 else if (IsPlacedResource())
409 {
410 return Heap->GetResidencyHandles();
411 }
412 else if (IsReservedResource())
413 {
414 return ReservedResourceData->ResidencyHandles;
415 }
416 else
417 {
418 checkf(ResidencyHandle, TEXT("Resource requires residency tracking, but StartTrackingForResidency() was not called."));
419 return MakeArrayView(&ResidencyHandle, 1);
420 }
421#else // ENABLE_RESIDENCY_MANAGEMENT
422 return {};
423#endif // ENABLE_RESIDENCY_MANAGEMENT
424 }
425
426 template<typename TLambda>
428 {
429 if (IsReservedResource())
430 {
431 for (TRefCountPtr<FD3D12Heap>& BackingHeap: ReservedResourceData->BackingHeaps)
432 {
433 Lambda(BackingHeap->GetGPUVirtualAddress(), BackingHeap->GetGPUVirtualAddress(), BackingHeap->GetHeapDesc().SizeInBytes);
434 }
435 }
436 }
437
439 {
450
452 {
453 // Ignore the requested resource state for non tracked resource because RHI will assume it's always in default resource
454 // state then when a transition is required (will transition via scoped push/pop to requested state)
456 {
457 return InD3D12Access;
458 }
459
460 if (bSRVOnly)
461 {
463 }
464 else if (bBuffer && !bUAV)
465 {
467 }
469 {
470 if (bDSV)
471 {
473 }
474 else if (bRTV)
475 {
476 return ED3D12Access::RTV;
477 }
478 else if (bUAV)
479 {
482 }
483 }
484
486 }
487
488 const uint32 bSRV : 1;
489 const uint32 bDSV : 1;
490 const uint32 bRTV : 1;
491 const uint32 bUAV : 1;
492 const uint32 bWritable : 1;
493 const uint32 bSRVOnly : 1;
494 const uint32 bBuffer : 1;
496 };
497
498 // Note: RequiredCommitSizeInBytes is clamped to the maximum size of the resource.
499 // Use UINT64_MAX to commit the entire resource.
501
502private:
503 void InitializeResourceState(
508 {
511
512 SubresourceCount = GetMipLevels() * GetArraySize() * GetPlaneCount();
513
515 {
516 // make sure a valid default state is set
519
520#if UE_BUILD_DEBUG
521 FPlatformAtomics::InterlockedIncrement(&NoStateTrackingResourceCount);
522#endif
523 InitialD3D12Access = InInitialD3D12Access;
524 DefaultD3D12Access = InDefaultD3D12Access;
525 bRequiresResourceStateTracking = false;
526 }
527 else
528 {
530 }
531
532 if (bRequiresResourceStateTracking)
533 {
534#if D3D12_RHI_RAYTRACING
535 // No state tracking for acceleration structures because they can't have another state
538#endif // D3D12_RHI_RAYTRACING
539
541 InitialD3D12Access = InInitialD3D12Access;
542 }
543 }
544
545 void DetermineResourceStates(
550 {
551 const FD3D12ResourceTypeHelper Type(Desc, HeapType);
552
553 bDepthStencil = Type.bDSV;
554
555#ifdef PLATFORM_SUPPORTS_RESOURCE_COMPRESSION
557#endif
558
560 {
561 bRequiresResourceStateTracking = false;
562
563#if UE_BUILD_DEBUG
564 FPlatformAtomics::InterlockedIncrement(&NoStateTrackingResourceCount);
565#endif
567 {
568 DefaultD3D12Access = InDefaultD3D12Access;
569 }
570 else if (Type.bBuffer)
571 {
572 DefaultD3D12Access = DetermineInitialBufferD3D12Access(HeapType, InHeapProps);
573 }
574 else
575 {
576 check(Type.bSRVOnly);
577 DefaultD3D12Access = ED3D12Access::SRVGraphics;
578 }
579
581 InitialD3D12Access = InInitialD3D12Access;
582 }
583 }
584};
585
587
589{
592
593 void Init()
594 {
595 Offset = 0;
596 Order = 0;
597 }
598};
599
615
617{
619
620 void Init()
621 {
622 Offset = 0;
623 }
624};
625
635
638
639// A very light-weight and cache friendly way of accessing a GPU resource
641{
643public:
645 {
651 eAliased, // XR HMDs are the only use cases
654 };
655
657 {
658 AT_Default, // FD3D12BaseAllocatorType
659 AT_SegList, // FD3D12SegListAllocator
660 AT_Pool, // FD3D12PoolAllocator
661 AT_Unknown = 0xff
662 };
663
670
672
673 void Clear();
674
675 // Transfers the contents of 1 resource location to another, destroying the original but preserving the underlying resource
676 static void TransferOwnership(FD3D12ResourceLocation& Destination, FD3D12ResourceLocation& Source);
677
678 // Setters
682
686
687 void ClearAllocator() { Allocator = nullptr; AllocatorType = AT_Unknown; }
688
689 void SetMappedBaseAddress (void* Value ) { MappedBaseAddress = Value; }
691 void SetOffsetFromBaseOfResource(uint64 Value ) { OffsetFromBaseOfResource = Value; }
693
694 // Getters
695 ResourceLocationType GetType () const { return Type; }
696 EAllocatorType GetAllocatorType () const { return AllocatorType; }
700 FD3D12Resource* GetResource () const { return UnderlyingResource; }
701 void* GetMappedBaseAddress () const { return MappedBaseAddress; }
702 D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress () const { return GPUVirtualAddress; }
703 uint64 GetOffsetFromBaseOfResource () const { return OffsetFromBaseOfResource; }
704 uint64 GetSize () const { return Size; }
705 FD3D12BuddyAllocatorPrivateData& GetBuddyAllocatorPrivateData () { return AllocatorData.BuddyAllocatorPrivateData; }
706 FD3D12BlockAllocatorPrivateData& GetBlockAllocatorPrivateData () { return AllocatorData.BlockAllocatorPrivateData; }
707 FD3D12SegListAllocatorPrivateData& GetSegListAllocatorPrivateData() { return AllocatorData.SegListAllocatorPrivateData; }
708 FD3D12PoolAllocatorPrivateData& GetPoolAllocatorPrivateData () { return AllocatorData.PoolAllocatorPrivateData; }
709
710 // Pool allocation specific functions
712 void UnlockPoolData();
713
714 bool IsValid() const { return Type != ResourceLocationType::eUndefined; }
715
716 void AsStandAlone(FD3D12Resource* Resource, uint64 InSize = 0, bool bInIsTransient = false, const D3D12_HEAP_PROPERTIES* CustomHeapProperties = nullptr);
718
720 {
722
724 SetResource(Resource);
725 SetSize(0);
726
727 if (IsCPUWritable(Resource->GetHeapType()))
728 {
729 D3D12_RANGE range = { 0, 0 };
730 SetMappedBaseAddress(Resource->Map(&range));
731 }
733 }
734
735
736 void AsFastAllocation(FD3D12Resource* Resource, uint32 BufferSize, D3D12_GPU_VIRTUAL_ADDRESS GPUBase, void* CPUBase, uint64 ResourceOffsetBase, uint64 Offset, bool bMultiFrame = false)
737 {
738 if (bMultiFrame)
739 {
740 Resource->AddRef();
742 }
743 else
744 {
746 }
747 SetResource(Resource);
748 SetSize(BufferSize);
750
751 if (CPUBase != nullptr)
752 {
753 SetMappedBaseAddress((uint8*)CPUBase + Offset);
754 }
755 SetGPUVirtualAddress(GPUBase + Offset);
756 }
757
758 // XR plugins alias textures so this allows 2+ resource locations to reference the same underlying
759 // resource. We should avoid this as much as possible as it requires expensive reference counting and
760 // it complicates the resource ownership model.
761 static void Alias(FD3D12ResourceLocation& Destination, FD3D12ResourceLocation& Source);
763 bool IsAliased() const
764 {
765 return (Type == ResourceLocationType::eAliased)
767 }
768
770 {
771 bTransient = bInTransient;
772 }
773 bool IsTransient() const
774 {
775 return bTransient;
776 }
777
780 {
781 return (uint8*)this + 1;
782 }
783
784private:
785
786 template<bool bReleaseResource>
787 void InternalClear();
788
789 void ReleaseResource();
790 void UpdateStandAloneStats(bool bIncrement);
791
793 FD3D12Resource* UnderlyingResource{};
794
795 // Which allocator this belongs to
796 union
797 {
801 };
802
803 // Union to save memory
804 union PrivateAllocatorData
805 {
806 FD3D12BuddyAllocatorPrivateData BuddyAllocatorPrivateData;
807 FD3D12BlockAllocatorPrivateData BlockAllocatorPrivateData;
808 FD3D12SegListAllocatorPrivateData SegListAllocatorPrivateData;
809 FD3D12PoolAllocatorPrivateData PoolAllocatorPrivateData;
810 } AllocatorData;
811
812 // Note: These values refer to the start of this location including any padding *NOT* the start of the underlying resource
813 void* MappedBaseAddress{};
814 D3D12_GPU_VIRTUAL_ADDRESS GPUVirtualAddress{};
815 uint64 OffsetFromBaseOfResource{};
816
817 // The size the application asked for
818 uint64 Size{};
819
821 EAllocatorType AllocatorType{ AT_Unknown };
822 bool bTransient{ false };
823};
824
825// Generic interface for every type D3D12 specific allocator
827{
828 // Helper function for textures to compute the correct size and alignment
829 void AllocateTexture(
830 uint32 GPUIndex,
838 const TCHAR* InName,
839 FD3D12ResourceLocation& ResourceLocation);
840
841 // Actual pure virtual resource allocation function
842 virtual void AllocateResource(
843 uint32 GPUIndex,
852 const TCHAR* InName,
853 FD3D12ResourceLocation& ResourceLocation) = 0;
854};
855
881
887
888
891{
892private:
893 mutable FCriticalSection RenameListenersCS;
895
896public:
898
900 {
901 FScopeLock Lock(&RenameListenersCS);
902 check(!RenameListeners.Contains(InRenameListener));
903 RenameListeners.Add(InRenameListener);
904 }
905
907 {
908 FScopeLock Lock(&RenameListenersCS);
909 uint32 Removed = RenameListeners.Remove(InRenameListener);
910
911 checkf(Removed == 1, TEXT("Should have exactly one registered listener during remove (same listener shouldn't registered twice and we shouldn't call this if not registered"));
912 }
913
914 bool HasLinkedViews() const
915 {
916 FScopeLock Lock(&RenameListenersCS);
917 return RenameListeners.Num() != 0;
918 }
919
921 {
922 FScopeLock Lock(&RenameListenersCS);
924 {
925 RenameListener->ResourceRenamed(Contexts, this, &ResourceLocation);
926 }
927 }
928
930
931public:
938
943};
944
946
953
955class FD3D12UniformBuffer : public FRHIUniformBuffer, public FD3D12DeviceChild, public FD3D12LinkedAdapterObject<FD3D12UniformBuffer>
956{
957private:
958 mutable FCriticalSection UpdateListenersCS;
960public:
961#if D3D12RHI_USE_CONSTANT_BUFFER_VIEWS
962 class FD3D12ConstantBufferView* View = nullptr;
963#endif
964
967
969
978
979 virtual ~FD3D12UniformBuffer();
980
981 // Provides public non-const access to ResourceTable.
982 // @todo refactor uniform buffers to perform updates as a member function, so this isn't necessary.
984
986 {
987 FScopeLock Lock(&UpdateListenersCS);
988 check(!UpdateListeners.Contains(InUpdateListener));
989 UpdateListeners.Add(InUpdateListener);
990 }
991
993 {
994 FScopeLock Lock(&UpdateListenersCS);
995 uint32 Removed = UpdateListeners.Remove(InUpdateListener);
996
997 checkf(Removed == 1, TEXT("Should have exactly one registered listener during remove (same listener shouldn't registered twice and we shouldn't call this if not registered"));
998 }
999
1000 bool HasListeners() const
1001 {
1002 FScopeLock Lock(&UpdateListenersCS);
1003 return UpdateListeners.Num() != 0;
1004 }
1005
1007 {
1008 FScopeLock Lock(&UpdateListenersCS);
1009 for (ID3D12UniformBufferUpdateListener* UpdateListener : UpdateListeners)
1010 {
1011 UpdateListener->UniformBufferUpdated(CmdList, this);
1012 }
1013 }
1014};
1015
1017{
1018public:
1025
1026 virtual ~FD3D12Buffer();
1027
1028 static void UploadResourceData(
1033 uint32 Size);
1034
1036
1037 // FRHIResource overrides
1038#if RHI_ENABLE_RESOURCE_INFO
1040 {
1043 OutResourceInfo.Type = GetType();
1045 {
1047 }
1048 else
1049 {
1050 OutResourceInfo.VRamAllocation.AllocationSize = ResourceLocation.GetSize();
1051 }
1053 OutResourceInfo.bResident = GetResource() && GetResource()->IsResident();
1054
1055 return true;
1056 }
1057#endif
1058
1061
1063 void ReleaseOwnership();
1064
1065 // IRefCountedObject interface.
1067 {
1069 }
1070 virtual uint32 Release() const
1071 {
1072 return FRHIResource::Release();
1073 }
1074 virtual uint32 GetRefCount() const
1075 {
1077 }
1078
1079 static void GetResourceDescAndAlignment(const FRHIBufferCreateDesc& CreateDesc, D3D12_RESOURCE_DESC& ResourceDesc, uint32& Alignment);
1080
1081 // There might be more than 1 VRAM allocation in case of reserved resources
1082#if ENABLE_LOW_LEVEL_MEM_TRACKER || UE_MEMORY_TRACE_ENABLED
1083 void UpdateAllocationTags() const;
1084#endif
1085
1088};
1089
1091{
1093}
1094
1096{
1098 friend class FD3D12DynamicRHI;
1099
1100public:
1103 , ResourceLocation(InDevice)
1104 , ShadowBufferSize(0)
1105 {}
1106 ~FD3D12StagingBuffer() override;
1107
1109 {
1110 ResourceLocation.Clear();
1111 }
1112
1113 void* Lock(uint32 Offset, uint32 NumBytes) override;
1114 void Unlock() override;
1115 uint64 GetGPUSizeBytes() const override { return ShadowBufferSize; }
1116
1117private:
1118 FD3D12ResourceLocation ResourceLocation;
1119 uint32 ShadowBufferSize;
1120};
1121
1123{
1125 friend class FD3D12DynamicRHI;
1126
1127public:
1133};
1134
1135class FD3D12GPUFence final : public FRHIGPUFence
1136{
1137public:
1138 FD3D12GPUFence(FName InName);
1139
1140 virtual void Clear() override;
1141 virtual bool Poll() const override;
1142 virtual bool Poll(FRHIGPUMask GPUMask) const override;
1143 virtual void Wait(FRHICommandListImmediate& RHICmdList, FRHIGPUMask GPUMask) const override;
1144
1146};
1147
1148template<>
1153template<>
1158template<>
1163template<>
1168template<>
1173template<>
1178template<>
1183template<>
1188template<>
1193template<>
1198template<>
1203template<>
1208
1209#if D3D12_RHI_RAYTRACING
1210template<>
1212{
1213 typedef FD3D12RayTracingScene TConcreteType;
1214};
1215template<>
1217{
1218 typedef FD3D12RayTracingGeometry TConcreteType;
1219};
1220template<>
1222{
1223 typedef FD3D12RayTracingPipelineState TConcreteType;
1224};
1225template<>
1227{
1228 typedef FD3D12RayTracingShaderBindingTable TConcreteType;
1229};
1230template<>
1232{
1233 typedef FD3D12RayTracingShader TConcreteType;
1234};
1235#endif // D3D12_RHI_RAYTRACING
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
ED3D12Access
Definition D3D12Access.h:15
constexpr bool IsValidAccess(ED3D12Access InD3D12Access)
Definition D3D12Access.h:78
class FD3D12BuddyAllocator FD3D12BaseAllocatorType
Definition D3D12Resources.h:586
ED3D12ResourceStateMode
Definition D3D12Resources.h:52
void SetD3D12ObjectName(ID3D12Object *Object, const TCHAR *Name)
Definition D3D12Util.cpp:57
#define VERIFYD3D12RESULT(x)
Definition D3D12Util.h:43
ED3D12Access DetermineInitialBufferD3D12Access(D3D12_HEAP_TYPE HeapType, const D3D12_HEAP_PROPERTIES *pCustomHeapProperties=nullptr)
Definition D3D12Util.h:385
bool IsCPUWritable(D3D12_HEAP_TYPE HeapType, const D3D12_HEAP_PROPERTIES *pCustomHeapProperties=nullptr)
Definition D3D12Util.h:364
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
uint32 HeapId
Definition MemoryTrace.h:30
@ VideoMemory
Definition MemoryTrace.h:36
const bool
Definition NetworkReplayStreaming.h:178
EPixelFormat
Definition PixelFormat.h:16
@ PF_Unknown
Definition PixelFormat.h:17
EUniformBufferUsage
Definition RHIDefinitions.h:536
FRHIGlobals GRHIGlobals
Definition RHIGlobals.cpp:6
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition D3D12Adapter.h:136
Definition D3D12Resources.h:891
void AddRenameListener(FD3D12ShaderResourceRenameListener *InRenameListener)
Definition D3D12Resources.h:899
void ResourceRenamed(FD3D12ContextArray const &Contexts)
Definition D3D12Resources.h:920
FD3D12Resource * GetResource() const
Definition D3D12Resources.h:897
FD3D12ResourceLocation ResourceLocation
Definition D3D12Resources.h:929
~FD3D12BaseShaderResource()
Definition D3D12Resources.h:939
FD3D12BaseShaderResource(FD3D12Device *InParent)
Definition D3D12Resources.h:932
bool HasLinkedViews() const
Definition D3D12Resources.h:914
void RemoveRenameListener(FD3D12ShaderResourceRenameListener *InRenameListener)
Definition D3D12Resources.h:906
Definition D3D12State.h:49
Definition D3D12Allocation.h:142
Definition D3D12Resources.h:1017
uint32 BufferAlignment
Definition D3D12Resources.h:1087
void ReleaseOwnership()
Definition D3D12Buffer.cpp:360
virtual ~FD3D12Buffer()
Definition D3D12Buffer.cpp:15
virtual uint32 Release() const
Definition D3D12Resources.h:1070
void Rename(FD3D12ContextArray const &Contexts, FD3D12ResourceLocation &NewLocation)
Definition D3D12Buffer.cpp:318
FD3D12SyncPointRef UploadResourceDataViaCopyQueue(FD3D12CommandContext &OwningContext, FResourceArrayUploadInterface *InResourceArray)
Definition D3D12Buffer.cpp:115
virtual uint32 GetRefCount() const
Definition D3D12Resources.h:1074
static void GetResourceDescAndAlignment(const FRHIBufferCreateDesc &CreateDesc, D3D12_RESOURCE_DESC &ResourceDesc, uint32 &Alignment)
Definition D3D12Buffer.cpp:375
static void UploadResourceData(FD3D12CommandContext &CommandContext, ED3D12Access DestinationD3D12Access, FD3D12ResourceLocation &DestinationResourceLocation, const FD3D12ResourceLocation &SourceResourceLocation, uint32 Size)
Definition D3D12Buffer.cpp:30
void RenameLDAChain(FD3D12ContextArray const &Contexts, FD3D12ResourceLocation &NewLocation)
Definition D3D12Buffer.cpp:324
virtual FReturnedRefCountValue AddRef() const
Definition D3D12Resources.h:1066
FD3D12Buffer(FD3D12Device *InParent, const FRHIBufferCreateDesc &InCreateDesc)
Definition D3D12Resources.h:1019
FD3D12LockedResource LockedData
Definition D3D12Resources.h:1086
Definition D3D12CommandContext.h:513
Definition D3D12CommandList.h:63
Definition D3D12View.h:336
Definition D3D12CommandContext.h:1193
Definition D3D12State.h:37
Definition D3D12RHICommon.h:78
FORCEINLINE FD3D12Device * GetParentDevice() const
Definition D3D12RHICommon.h:85
FD3D12Device * Parent
Definition D3D12RHICommon.h:80
Definition D3D12Device.h:176
Definition D3D12RHIPrivate.h:160
Definition D3D12Resources.h:1136
virtual bool Poll() const override
Definition D3D12DirectCommandListManager.cpp:21
TArray< FD3D12SyncPointRef, TInlineAllocator< MAX_NUM_GPUS > > SyncPoints
Definition D3D12Resources.h:1145
virtual void Clear() override
Definition D3D12DirectCommandListManager.cpp:15
virtual void Wait(FRHICommandListImmediate &RHICmdList, FRHIGPUMask GPUMask) const override
Definition D3D12DirectCommandListManager.cpp:45
Definition D3D12Resources.h:73
void SetHeap(ID3D12Heap *HeapIn, const TCHAR *const InName, bool bTrack=true, bool bForceGetGPUAddress=false)
Definition D3D12Resources.cpp:704
~FD3D12Heap()
Definition D3D12Resources.cpp:666
bool GetIsTransient() const
Definition D3D12Resources.h:104
void BeginTrackingResidency(uint64 Size)
Definition D3D12Resources.cpp:757
FName GetName() const
Definition D3D12Resources.h:86
void SetIsTransient(bool bInIsTransient)
Definition D3D12Resources.h:103
TConstArrayView< FD3D12ResidencyHandle * > GetResidencyHandles()
Definition D3D12Resources.h:88
void DeferDelete()
Definition D3D12Resources.cpp:696
D3D12_HEAP_DESC GetHeapDesc() const
Definition D3D12Resources.h:87
ID3D12Heap * GetHeap() const
Definition D3D12Resources.h:78
void DisallowTrackingResidency()
Definition D3D12Resources.cpp:749
D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress() const
Definition D3D12Resources.h:102
Definition D3D12RHICommon.h:164
Definition D3D12RHICommon.h:153
Definition D3D12Resources.h:59
D3D12_RESOURCE_STATES State
Definition D3D12Resources.h:62
FD3D12PendingResourceBarrier(FD3D12Resource *Resource, D3D12_RESOURCE_STATES State, uint32 SubResource)
Definition D3D12Resources.h:65
FD3D12Resource * Resource
Definition D3D12Resources.h:61
uint32 SubResource
Definition D3D12Resources.h:63
D3D12 specific implementation of the FRHIPoolAllocator.
Definition D3D12PoolAllocator.h:130
Definition D3D12State.h:29
Definition D3D12Allocation.h:84
Definition D3D12Resources.h:641
static void TransferOwnership(FD3D12ResourceLocation &Destination, FD3D12ResourceLocation &Source)
Definition D3D12Resources.cpp:1208
void * GetAddressForLLMTracking() const
Definition D3D12Resources.h:779
FD3D12ResourceLocation(FD3D12ResourceLocation &&Other)
Definition D3D12Resources.h:665
~FD3D12ResourceLocation()
Definition D3D12Resources.cpp:1174
bool IsValid() const
Definition D3D12Resources.h:714
void SetPoolAllocator(FD3D12PoolAllocator *Value)
Definition D3D12Resources.h:685
void SetGPUVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS Value)
Definition D3D12Resources.h:690
void SetSize(uint64 Value)
Definition D3D12Resources.h:692
ResourceLocationType GetType() const
Definition D3D12Resources.h:695
ResourceLocationType
Definition D3D12Resources.h:645
bool OnAllocationMoved(FD3D12ContextArray const &Contexts, FRHIPoolAllocationData *InNewData, ED3D12Access &OutRHIAccess)
Definition D3D12Resources.cpp:1486
FD3D12BaseAllocatorType * GetAllocator()
Definition D3D12Resources.h:697
FD3D12Resource * GetResource() const
Definition D3D12Resources.h:700
void SetType(ResourceLocationType Value)
Definition D3D12Resources.h:680
void SetAllocator(FD3D12BaseAllocatorType *Value)
Definition D3D12Resources.h:683
void SetResource(FD3D12Resource *Value)
Definition D3D12Resources.cpp:1457
FD3D12BaseAllocatorType * Allocator
Definition D3D12Resources.h:798
void UnlockPoolData()
Definition D3D12Resources.cpp:1615
void SetOffsetFromBaseOfResource(uint64 Value)
Definition D3D12Resources.h:691
FD3D12SegListAllocatorPrivateData & GetSegListAllocatorPrivateData()
Definition D3D12Resources.h:707
void AsStandAlone(FD3D12Resource *Resource, uint64 InSize=0, bool bInIsTransient=false, const D3D12_HEAP_PROPERTIES *CustomHeapProperties=nullptr)
Definition D3D12Resources.cpp:1467
bool IsStandaloneOrPooledPlacedResource() const
Definition D3D12Resources.cpp:1623
static void ReferenceNode(FD3D12Device *NodeDevice, FD3D12ResourceLocation &Destination, FD3D12ResourceLocation &Source)
Definition D3D12Resources.cpp:1258
FD3D12SegListAllocator * GetSegListAllocator()
Definition D3D12Resources.h:698
void Clear()
Definition D3D12Resources.cpp:1179
void SetTransient(bool bInTransient)
Definition D3D12Resources.h:769
D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress() const
Definition D3D12Resources.h:702
EAllocatorType
Definition D3D12Resources.h:657
@ AT_SegList
Definition D3D12Resources.h:659
@ AT_Pool
Definition D3D12Resources.h:660
@ AT_Unknown
Definition D3D12Resources.h:661
@ AT_Default
Definition D3D12Resources.h:658
void SetOwner(FD3D12BaseShaderResource *InOwner)
Definition D3D12Resources.h:679
FD3D12PoolAllocator * PoolAllocator
Definition D3D12Resources.h:800
bool IsAliased() const
Definition D3D12Resources.h:763
FD3D12BlockAllocatorPrivateData & GetBlockAllocatorPrivateData()
Definition D3D12Resources.h:706
void ClearAllocator()
Definition D3D12Resources.h:687
void SetSegListAllocator(FD3D12SegListAllocator *Value)
Definition D3D12Resources.h:684
uint64 GetSize() const
Definition D3D12Resources.h:704
EAllocatorType GetAllocatorType() const
Definition D3D12Resources.h:696
void SetMappedBaseAddress(void *Value)
Definition D3D12Resources.h:689
void AsHeapAliased(FD3D12Resource *Resource)
Definition D3D12Resources.h:719
void * GetMappedBaseAddress() const
Definition D3D12Resources.h:701
FD3D12SegListAllocator * SegListAllocator
Definition D3D12Resources.h:799
bool IsTransient() const
Definition D3D12Resources.h:773
uint64 GetOffsetFromBaseOfResource() const
Definition D3D12Resources.h:703
void AsFastAllocation(FD3D12Resource *Resource, uint32 BufferSize, D3D12_GPU_VIRTUAL_ADDRESS GPUBase, void *CPUBase, uint64 ResourceOffsetBase, uint64 Offset, bool bMultiFrame=false)
Definition D3D12Resources.h:736
FD3D12PoolAllocator * GetPoolAllocator()
Definition D3D12Resources.h:699
FD3D12PoolAllocatorPrivateData & GetPoolAllocatorPrivateData()
Definition D3D12Resources.h:708
FD3D12BuddyAllocatorPrivateData & GetBuddyAllocatorPrivateData()
Definition D3D12Resources.h:705
Definition D3D12Resources.h:181
bool IsPlacedResource() const
Definition D3D12Resources.h:354
void SetUAVAccessResourceDesc(const D3D12_RESOURCE_DESC &InUAVAccessResourceDesc)
Definition D3D12Resources.h:272
bool RequiresResourceStateTracking() const
Definition D3D12Resources.h:325
const FD3D12ResourceDesc & GetDesc() const
Definition D3D12Resources.h:310
uint16 GetArraySize() const
Definition D3D12Resources.h:316
void DeferDelete()
Definition D3D12Resources.cpp:650
void StartTrackingForResidency()
Definition D3D12Resources.cpp:625
ED3D12Access GetDefaultAccess() const
Definition D3D12Resources.h:320
ID3D12Resource * GetResource() const
Definition D3D12Resources.h:264
TConstArrayView< FD3D12ResidencyHandle * > GetResidencyHandles() const
Definition D3D12Resources.h:401
bool ShouldDeferDelete() const
Definition D3D12Resources.h:350
D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress() const
Definition D3D12Resources.h:312
void * GetResourceBaseAddress() const
Definition D3D12Resources.h:314
uint16 GetSubresourceCount() const
Definition D3D12Resources.h:318
FName GetName() const
Definition D3D12Resources.h:340
ID3D12Pageable * GetPageable()
Definition D3D12Resources.cpp:613
void SetGPUVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS Value)
Definition D3D12Resources.h:313
uint64 GetCommittedReservedResourceSize() const
Definition D3D12Resources.h:358
void * Map(const D3D12_RANGE *ReadRange=nullptr)
Definition D3D12Resources.h:278
FD3D12Heap * GetHeap() const
Definition D3D12Resources.h:355
void CommitReservedResource(ID3D12CommandQueue *D3DCommandQueue, uint64 RequiredCommitSizeInBytes)
Definition D3D12Resources.cpp:223
bool IsDepthStencilResource() const
Definition D3D12Resources.h:356
const D3D12_RESOURCE_DESC * GetUAVAccessResourceDesc() const
Definition D3D12Resources.h:267
void Unmap()
Definition D3D12Resources.h:295
bool IsReservedResource() const
Definition D3D12Resources.h:353
void DoNotDeferDelete()
Definition D3D12Resources.h:345
D3D12_HEAP_TYPE GetHeapType() const
Definition D3D12Resources.h:311
bool NeedsDeferredResidencyUpdate() const
Definition D3D12Resources.h:364
uint16 GetMipLevels() const
Definition D3D12Resources.h:315
uint8 GetPlaneCount() const
Definition D3D12Resources.h:317
bool IsResident() const
Definition D3D12Resources.h:368
bool IsBackBuffer() const
Definition D3D12Resources.h:327
FORCEINLINE_DEBUGGABLE void GetBackingHeapsGpuAddresses(TLambda &&Lambda) const
Definition D3D12Resources.h:427
void SetName(const TCHAR *Name)
Definition D3D12Resources.h:329
FD3D12Resource()=delete
ED3D12Access GetInitialAccess() const
Definition D3D12Resources.h:319
virtual ~FD3D12Resource()
Definition D3D12Resources.cpp:178
Definition D3D12State.h:13
Definition D3D12Allocation.h:761
Definition D3D12Resources.h:1123
FD3D12ShaderBundle(FD3D12Device *InDevice, const FShaderBundleCreateInfo &CreateInfo)
Definition D3D12Resources.h:1128
Definition D3D12Resources.h:1096
void Unlock() override
Definition D3D12DirectCommandListManager.cpp:135
~FD3D12StagingBuffer() override
Definition D3D12DirectCommandListManager.cpp:115
void SafeRelease()
Definition D3D12Resources.h:1108
uint64 GetGPUSizeBytes() const override
Definition D3D12Resources.h:1115
FD3D12StagingBuffer(FD3D12Device *InDevice)
Definition D3D12Resources.h:1101
Definition D3D12StateCachePrivate.h:300
Definition D3D12Submission.h:76
Definition D3D12Resources.h:956
virtual ~FD3D12UniformBuffer()
Definition D3D12UniformBuffer.cpp:234
FD3D12ResourceLocation ResourceLocation
Definition D3D12Resources.h:966
void RemoveUpdateListener(ID3D12UniformBufferUpdateListener *InUpdateListener)
Definition D3D12Resources.h:992
const EUniformBufferUsage UniformBufferUsage
Definition D3D12Resources.h:968
bool HasListeners() const
Definition D3D12Resources.h:1000
void UniformBufferUpdated(FRHICommandListBase &CmdList)
Definition D3D12Resources.h:1006
void AddUpdateListener(ID3D12UniformBufferUpdateListener *InUpdateListener)
Definition D3D12Resources.h:985
TArray< TRefCountPtr< FRHIResource > > & GetResourceTable()
Definition D3D12Resources.h:983
FD3D12UniformBuffer(class FD3D12Device *InParent, const FRHIUniformBufferLayout *InLayout, EUniformBufferUsage InUniformBufferUsage)
Definition D3D12Resources.h:971
Definition NameTypes.h:617
Definition UnrealTemplate.h:321
Definition RHIResources.h:696
Definition RHIResources.h:1581
Definition RHICommandList.h:455
Definition RHICommandList.h:4626
Definition RHIResources.h:1078
Definition RHIResources.h:686
Definition RHIResources.h:2387
Definition RHIResources.h:1058
Owner of the pool allocation data which needs to handle memory move operations.
Definition RHIPoolAllocator.h:19
Definition RHIResources.h:679
Definition RHIResources.h:3729
Definition RHIResources.h:1115
Definition RHIResources.h:3755
Definition RHIResources.h:984
uint32 GetRefCount() const
Definition RHIResources.h:93
uint32 Release() const
Definition RHIResources.h:80
ERHIResourceType GetType() const
Definition RHIResources.h:111
uint32 AddRef() const
Definition RHIResources.h:73
Definition RHIResources.h:671
Definition RHIResources.h:3863
Definition RHIResources.h:3919
Definition RHIResources.h:3981
Definition RHIResources.h:1232
TArray< TRefCountPtr< FRHIResource > > ResourceTable
Definition RHIResources.h:1255
FName GetName() const
Definition RHIResources.h:1272
Definition RHIResources.h:1106
Definition ScopeLock.h:141
Definition RefCounting.h:283
FReturnedRefCountValue AddRef() const
Definition RefCounting.h:295
Definition RefCounting.h:196
Definition Array.h:670
SizeType Remove(const ElementType &Item)
Definition Array.h:3091
UE_REWRITE SizeType Num() const
Definition Array.h:1144
bool Contains(const ComparisonType &Item) const
Definition Array.h:1518
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
Definition UniquePtr.h:107
bool IsValid() const
Definition UniquePtr.h:280
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
Definition D3D12Resources.h:1091
void UpdateBufferStats(FD3D12Buffer &Buffer, bool bAllocating)
Definition D3D12Stats.cpp:28
Type
Definition PawnAction_Move.h:11
State
Definition PacketHandler.h:88
Definition D3D12Resources.h:601
uint32 BucketIndex
Definition D3D12Resources.h:603
void Init()
Definition D3D12Resources.h:607
uint64 FrameFence
Definition D3D12Resources.h:602
FD3D12Resource * ResourceHeap
Definition D3D12Resources.h:605
uint32 Offset
Definition D3D12Resources.h:604
Definition D3D12Resources.h:589
uint32 Order
Definition D3D12Resources.h:591
void Init()
Definition D3D12Resources.h:593
uint32 Offset
Definition D3D12Resources.h:590
Definition D3D12PipelineState.h:424
Definition D3D12PipelineState.h:394
Definition D3D12Resources.h:857
uint32 LockOffset
Definition D3D12Resources.h:875
uint32 bLocked
Definition D3D12Resources.h:877
D3D12_SUBRESOURCE_FOOTPRINT Footprint
Definition D3D12Resources.h:874
FD3D12ResourceLocation ResourceLocation
Definition D3D12Resources.h:873
uint32 bHasNeverBeenLocked
Definition D3D12Resources.h:879
uint32 bLockedForReadOnly
Definition D3D12Resources.h:878
FD3D12LockedResource(FD3D12Device *Device)
Definition D3D12Resources.h:858
uint32 LockSize
Definition D3D12Resources.h:876
void Reset()
Definition D3D12Resources.h:863
Definition D3D12Resources.h:627
void Init()
Definition D3D12Resources.h:630
FRHIPoolAllocationData PoolData
Definition D3D12Resources.h:628
Definition D3D12Residency.h:46
Definition D3D12Resources.h:134
FD3D12ResourceDesc(const D3D12_RESOURCE_DESC &Other)
Definition D3D12Resources.h:146
bool bBackBuffer
Definition D3D12Resources.h:163
bool SupportsUncompressedUAV() const
Definition D3D12Resources.h:176
EPixelFormat PixelFormat
Definition D3D12Resources.h:152
FD3D12ResourceDesc()
Definition D3D12Resources.h:135
FD3D12ResourceDesc(const CD3DX12_RESOURCE_DESC &Other)
Definition D3D12Resources.h:139
bool bReservedResource
Definition D3D12Resources.h:161
bool NeedsUAVAliasWorkarounds() const
Definition D3D12Resources.h:175
EPixelFormat UAVPixelFormat
Definition D3D12Resources.h:155
bool bExternal
Definition D3D12Resources.h:166
Definition D3D12Resources.h:439
const uint32 bWritable
Definition D3D12Resources.h:492
ED3D12Access GetOptimalInitialD3D12Access(ED3D12Access InD3D12Access, bool bAccurateWriteableStates) const
Definition D3D12Resources.h:451
const uint32 bSRV
Definition D3D12Resources.h:488
const uint32 bRTV
Definition D3D12Resources.h:490
const uint32 bSRVOnly
Definition D3D12Resources.h:493
const uint32 bUAV
Definition D3D12Resources.h:491
const uint32 bBuffer
Definition D3D12Resources.h:494
FD3D12ResourceTypeHelper(const FD3D12ResourceDesc &Desc, D3D12_HEAP_TYPE HeapType)
Definition D3D12Resources.h:440
const uint32 bReadBackResource
Definition D3D12Resources.h:495
const uint32 bDSV
Definition D3D12Resources.h:489
Definition D3D12Resources.h:617
void Init()
Definition D3D12Resources.h:620
uint32 Offset
Definition D3D12Resources.h:618
Definition D3D12Resources.h:884
virtual void ResourceRenamed(FD3D12ContextArray const &Contexts, FD3D12BaseShaderResource *InRenamedResource, FD3D12ResourceLocation *InNewResourceLocation)=0
Definition D3D12WorkGraph.h:13
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
Definition RHIResources.h:1417
Definition MultiGPU.h:33
static constexpr int32 TileSizeInBytes
Definition RHIGlobals.h:697
struct FRHIGlobals::FReservedResources ReservedResources
Pool allocator internal data.
Definition RHIPoolAllocator.h:39
RHICORE_API void Reset()
Definition RHIPoolAllocator.cpp:31
Definition RHI.h:543
FName Name
Definition RHI.h:544
Definition RHIResources.h:1150
Definition ResourceArray.h:10
Definition RefCounting.h:29
Definition RHIResources.h:3910
Definition D3D12Resources.h:827
void AllocateTexture(uint32 GPUIndex, D3D12_HEAP_TYPE InHeapType, const FD3D12ResourceDesc &InDesc, EPixelFormat InUEFormat, ED3D12Access InInitialD3D12Access, ED3D12ResourceStateMode InResourceStateMode, ED3D12Access InDefaultD3D12Access, const D3D12_CLEAR_VALUE *InClearValue, const TCHAR *InName, FD3D12ResourceLocation &ResourceLocation)
Definition D3D12Resources.cpp:29
virtual void AllocateResource(uint32 GPUIndex, D3D12_HEAP_TYPE InHeapType, const FD3D12ResourceDesc &InDesc, uint64 InSize, uint32 InAllocationAlignment, ED3D12Access InInitialD3D12Access, ED3D12ResourceStateMode InResourceStateMode, ED3D12Access InDefaultD3D12Access, const D3D12_CLEAR_VALUE *InClearValue, const TCHAR *InName, FD3D12ResourceLocation &ResourceLocation)=0
Definition D3D12Resources.h:949
virtual void UniformBufferUpdated(FRHICommandListBase &CmdList, FD3D12UniformBuffer *InUpdatedUniformBuffer)=0
virtual void RemoveListener(FD3D12UniformBuffer *InUniformBufferToRemove)=0
FD3D12BlendState TConcreteType
Definition D3D12Resources.h:1176
FD3D12Buffer TConcreteType
Definition D3D12Resources.h:1156
FD3D12ComputePipelineState TConcreteType
Definition D3D12Resources.h:1186
FD3D12DepthStencilState TConcreteType
Definition D3D12Resources.h:1171
FD3D12GPUFence TConcreteType
Definition D3D12Resources.h:1196
FD3D12GraphicsPipelineState TConcreteType
Definition D3D12Resources.h:1181
FD3D12RasterizerState TConcreteType
Definition D3D12Resources.h:1166
FD3D12SamplerState TConcreteType
Definition D3D12Resources.h:1161
FD3D12ShaderBundle TConcreteType
Definition D3D12Resources.h:1206
FD3D12StagingBuffer TConcreteType
Definition D3D12Resources.h:1201
FD3D12UniformBuffer TConcreteType
Definition D3D12Resources.h:1151
FD3D12WorkGraphPipelineState TConcreteType
Definition D3D12Resources.h:1191
Definition D3D12RHICommon.h:374
Definition D3D12Resources.h:126