UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
D3D11Resources.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 D3D11Resources.h: D3D resource RHI definitions.
5=============================================================================*/
6
7#pragma once
8
10#include "ShaderCore.h"
12
15
16template <>
17struct TTypeTraits<D3D11_INPUT_ELEMENT_DESC> : public TTypeTraitsBase<D3D11_INPUT_ELEMENT_DESC>
18{
19 enum { IsBytewiseComparable = true };
20};
21
24
41
49
52{
53public:
55
58
61
62 // TEMP remove with removal of bound shader state
64};
65
74
83
92
129
132{
133public:
135 {
136 checkf(!HasLinkedViews(), TEXT("All linked views must have been removed before the underlying resource can be deleted."));
137 }
138
139 bool HasLinkedViews() const
140 {
141 return LinkedViews != nullptr;
142 }
143
144 void UpdateLinkedViews();
145
146private:
149 class FD3D11View* LinkedViews = nullptr;
150};
151
154{
155public:
157 void FinalizeCreation(
164 );
165
178
180 D3D11RHI_API explicit FD3D11Texture(FD3D11Texture const& Other, const FString& Name, EAliasResourceParam);
182
184
185 inline uint64 GetMemorySize() const
186 {
188 }
189
190 // Accessors.
191 inline ID3D11Resource* GetResource() const { return Resource; }
192 inline ID3D11ShaderResourceView* GetShaderResourceView() const { return ShaderResourceView; }
193
194 inline bool IsCubemap() const
195 {
196 FRHITextureDesc const& Desc = GetDesc();
198 }
199
210
212 {
213 check(Resource);
215
216 return static_cast<ID3D11Texture3D*>(Resource.GetReference());
217 }
218
219 inline bool IsTexture3D() const
220 {
222 }
223
224 virtual inline void* GetNativeResource() const override
225 {
226 return GetResource();
227 }
228
229 virtual inline void* GetNativeShaderResourceView() const override
230 {
231 return GetShaderResourceView();
232 }
233
234 virtual inline void* GetTextureBaseRHI() override
235 {
236 return this;
237 }
238
240 {
241 IHVResourceHandle = InHandle;
242 }
243
244 inline void* GetIHVResourceHandle() const
245 {
246 return IHVResourceHandle;
247 }
248
253 inline ID3D11RenderTargetView* GetRenderTargetView(int32 MipIndex, int32 ArraySliceIndex) const
254 {
255 int32 ArrayIndex = MipIndex;
256
257 if (bCreatedRTVsPerSlice)
258 {
259 check(ArraySliceIndex >= 0);
260 ArrayIndex = MipIndex * RTVArraySize + ArraySliceIndex;
261 }
262 else
263 {
264 // Catch attempts to use a specific slice without having created the texture to support it
265 check(ArraySliceIndex == -1 || ArraySliceIndex == 0);
266 }
267
268 if ((uint32)ArrayIndex < (uint32)RenderTargetViews.Num())
269 {
270 return RenderTargetViews[ArrayIndex];
271 }
272 return 0;
273 }
274
276 {
277 return DepthStencilViews[AccessType.GetIndex()];
278 }
279
280#if RHI_ENABLE_RESOURCE_INFO
281 virtual bool GetResourceInfo(FRHIResourceInfo& OutResourceInfo) const override
282 {
285 OutResourceInfo.Type = GetType();
286 OutResourceInfo.VRamAllocation.AllocationSize = GetMemorySize();
287 return true;
288 }
289#endif
290
296
298 void Unlock(FD3D11DynamicRHI* D3DRHI, const FRHILockTextureArgs& Arguments);
299
300private:
301 //Resource handle for use by IHVs for SLI and other purposes.
302 void* IHVResourceHandle = nullptr;
303
306
309
312
315
316 int32 RTVArraySize = 0;
317
318 uint8 bCreatedRTVsPerSlice : 1;
319 uint8 bAlias : 1;
320};
321
323{
324private:
326
327 // Location the result is written to.
328 uint64* Target = nullptr;
329
330 // Linked list pointers. Used to build a list of "active" queries, i.e. queries that need data to be polled from the GPU.
331 FD3D11RenderQuery** Prev = nullptr;
332 FD3D11RenderQuery* Next = nullptr;
333
334public:
337 std::atomic<uint8> LastCachedBOPCounter = 0;
338
339 enum class EType : uint8
340 {
341 Timestamp,
342 Occlusion,
343 Profiler,
345 } const Type;
346
349
350 bool CacheResult(class FD3D11DynamicRHI& RHI, bool bWait);
351
353 void End(ID3D11DeviceContext* Context, uint64* Target);
354
355 bool IsLinked() const { return Prev != nullptr; }
356
357private:
358 void Link();
359 void Unlink();
360};
361
372
375
378{
380 void* DataPtr;
383
385 inline bool IsValid() const { return Buffer != NULL; }
386};
387
390{
391public:
392
395
398
407
408 virtual ~FD3D11UniformBuffer();
409
410 // Provides public non-const access to ResourceTable.
411 // @todo refactor uniform buffers to perform updates as a member function, so this isn't necessary.
413
414private:
416 bool bAllocatedFromPool;
417};
418
421{
422public:
423
425
430
431 // FRHIResource overrides
432#if RHI_ENABLE_RESOURCE_INFO
434 {
437 OutResourceInfo.Type = GetType();
438 OutResourceInfo.VRamAllocation.AllocationSize = GetSize();
439 return true;
440 }
441#endif
442
443 virtual ~FD3D11Buffer();
444
446 void ReleaseOwnership();
447
448 // IRefCountedObject interface.
449 virtual uint32 AddRef() const
450 {
451 return FRHIResource::AddRef();
452 }
453 virtual uint32 Release() const
454 {
455 return FRHIResource::Release();
456 }
457 virtual uint32 GetRefCount() const
458 {
460 }
461
463 {
464 return Resource.GetReference();
465 }
466};
467
469{
470 friend class FD3D11DynamicRHI;
471public:
475
476 ~FD3D11StagingBuffer() override;
477
478 void* Lock(uint32 Offset, uint32 NumBytes) override;
479 void Unlock() override;
480 uint64 GetGPUSizeBytes() const override { return ShadowBufferSize; }
481
482private:
485 uint32 ShadowBufferSize;
486};
487
488class FD3D11GPUFence final : public FRHIGPUFence
489{
490private:
491 struct FD3D11Sync
492 {
493 // The graph event to trigger when the sync is resolved.
494 FGraphEventRef Event;
495
496 // The D3D11 API query object to poll / wait on.
498
499 FD3D11Sync() = default;
501 : Event(MoveTemp(Event))
503 {}
504 };
505
507 static void PollFencesUntil(FGraphEvent* Target);
508
509 FGraphEventRef Event;
510
511public:
512 FD3D11GPUFence(FName InName);
513
514 void Clear() override;
515 bool Poll() const override;
516 void Wait(FRHICommandListImmediate& RHICmdList, FRHIGPUMask GPUMask) const override;
517
519
520 static void PollFences()
521 {
522 PollFencesUntil(nullptr);
523 }
524};
525
531
532class FD3D11View : public TIntrusiveLinkedList<FD3D11View>
533{
534public:
535 virtual ~FD3D11View()
536 {
537 Unlink();
538 }
539
540 virtual void UpdateView() = 0;
541};
542
554
566
567template<class T>
569{
570};
571template<>
576template<>
581template<>
586template<>
591template<>
596template<>
601template<>
606template<>
611template<>
616template<>
621// @todo-staging Implement D3D11 fences.
622template<>
627template<>
632template<>
637
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
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
ID3D11DeviceContext FD3D11DeviceContext
Definition D3D11Resources.h:14
TArray< D3D11_INPUT_ELEMENT_DESC, TFixedAllocator< MaxVertexElementCount > > FD3D11VertexElements
Definition D3D11Resources.h:23
FRHICalcTextureSizeResult RHICalcTexturePlatformSize(FRHITextureDesc const &Desc, uint32 FirstMipIndex=0)
Definition DynamicRHI.h:1237
@ SF_Compute
Definition RHIDefinitions.h:208
@ SF_Vertex
Definition RHIDefinitions.h:203
@ SF_Geometry
Definition RHIDefinitions.h:207
@ SF_Pixel
Definition RHIDefinitions.h:206
@ SF_NumStandardFrequencies
Definition RHIDefinitions.h:222
@ MaxVertexElementCount
Definition RHIDefinitions.h:276
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
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 D3D11RHI.Build.cs:8
Definition TaskGraphInterfaces.h:471
Definition D3D11Resources.h:98
TRefCountPtr< ID3D11VertexShader > VertexShader
Definition D3D11Resources.h:104
FD3D11PixelShader * GetPixelShader() const
Definition D3D11Resources.h:126
~FD3D11BoundShaderState()
Definition D3D11Shaders.cpp:300
FD3D11GeometryShader * GetGeometryShader() const
Definition D3D11Resources.h:127
FD3D11VertexShader * GetVertexShader() const
Definition D3D11Resources.h:125
uint16 StreamStrides[MaxVertexElementCount]
Definition D3D11Resources.h:102
FCachedBoundShaderStateLink CacheLink
Definition D3D11Resources.h:101
TRefCountPtr< ID3D11InputLayout > InputLayout
Definition D3D11Resources.h:103
TRefCountPtr< ID3D11GeometryShader > GeometryShader
Definition D3D11Resources.h:106
TRefCountPtr< ID3D11PixelShader > PixelShader
Definition D3D11Resources.h:105
bool bShaderNeedsGlobalConstantBuffer[SF_NumStandardFrequencies]
Definition D3D11Resources.h:108
Definition D3D11Resources.h:421
virtual uint32 GetRefCount() const
Definition D3D11Resources.h:457
virtual ~FD3D11Buffer()
Definition D3D11Buffer.cpp:19
virtual uint32 Release() const
Definition D3D11Resources.h:453
FD3D11Buffer(ID3D11Buffer *InResource, const FRHIBufferCreateDesc &InCreateDesc)
Definition D3D11Resources.h:426
virtual uint32 AddRef() const
Definition D3D11Resources.h:449
TRefCountPtr< ID3D11Buffer > Resource
Definition D3D11Resources.h:424
void ReleaseOwnership()
Definition D3D11Buffer.cpp:30
ID3D11Resource * GetResource() const
Definition D3D11Resources.h:462
Definition D3D11Resources.h:85
@ StaticFrequency
Definition D3D11Resources.h:87
TRefCountPtr< ID3D11ComputeShader > Resource
Definition D3D11Resources.h:90
Definition D3D11RHIPrivate.h:366
Definition D3D11Resources.h:489
bool Poll() const override
Definition D3D11Commands.cpp:1714
void Clear() override
Definition D3D11Commands.cpp:1709
void Wait(FRHICommandListImmediate &RHICmdList, FRHIGPUMask GPUMask) const override
Definition D3D11Commands.cpp:1719
static void PollFences()
Definition D3D11Resources.h:520
void WriteGPUFence_TopOfPipe(FRHICommandListBase &RHICmdList)
Definition D3D11Commands.cpp:1828
Definition D3D11Resources.h:67
@ StaticFrequency
Definition D3D11Resources.h:69
TRefCountPtr< ID3D11GeometryShader > Resource
Definition D3D11Resources.h:72
Definition D3D11Resources.h:76
@ StaticFrequency
Definition D3D11Resources.h:78
TRefCountPtr< ID3D11PixelShader > Resource
Definition D3D11Resources.h:81
Definition D3D11Resources.h:364
FD3D11RenderQuery_RHI(EType Type)
Definition D3D11Resources.h:368
uint64 Result
Definition D3D11Resources.h:366
Definition D3D11Resources.h:323
bool IsLinked() const
Definition D3D11Resources.h:355
uint8 BOPCounter
Definition D3D11Resources.h:336
~FD3D11RenderQuery()
Definition D3D11Query.cpp:50
EType
Definition D3D11Resources.h:340
std::atomic< uint8 > LastCachedBOPCounter
Definition D3D11Resources.h:337
uint8 TOPCounter
Definition D3D11Resources.h:335
enum FD3D11RenderQuery::EType Type
bool CacheResult(class FD3D11DynamicRHI &RHI, bool bWait)
Definition D3D11Query.cpp:175
Definition D3D11Resources.h:545
virtual void UpdateView() override
Definition D3D11SRV.cpp:29
FD3D11ViewableResource * GetBaseResource() const
Definition D3D11SRV.cpp:144
TRefCountPtr< ID3D11ShaderResourceView > View
Definition D3D11Resources.h:547
Definition D3D11Resources.h:469
void Unlock() override
Definition D3D11Commands.cpp:1635
~FD3D11StagingBuffer() override
Definition D3D11Commands.cpp:1609
uint64 GetGPUSizeBytes() const override
Definition D3D11Resources.h:480
FD3D11StagingBuffer()
Definition D3D11Resources.h:472
Definition D3D11Resources.h:154
uint64 GetMemorySize() const
Definition D3D11Resources.h:185
ID3D11RenderTargetView * GetRenderTargetView(int32 MipIndex, int32 ArraySliceIndex) const
Definition D3D11Resources.h:253
D3D11RHI_API void AliasResource(FD3D11Texture const &Other)
Definition D3D11Texture.cpp:1643
virtual void * GetNativeResource() const override
Definition D3D11Resources.h:224
void SetIHVResourceHandle(void *InHandle)
Definition D3D11Resources.h:239
virtual D3D11RHI_API ~FD3D11Texture()
Definition D3D11Texture.cpp:1635
virtual void * GetTextureBaseRHI() override
Definition D3D11Resources.h:234
FD3D11Texture(const FRHITextureCreateDesc &InDesc, ID3D11Resource *InResource, ID3D11ShaderResourceView *InShaderResourceView, int32 InRTVArraySize, bool bInCreatedRTVsPerSlice, TConstArrayView< TRefCountPtr< ID3D11RenderTargetView > > InRenderTargetViews, TConstArrayView< TRefCountPtr< ID3D11DepthStencilView > > InDepthStencilViews)
Definition D3D11Resources.h:166
ID3D11Texture2D * GetD3D11Texture2D() const
Definition D3D11Resources.h:200
void Unlock(FD3D11DynamicRHI *D3DRHI, const FRHILockTextureArgs &Arguments)
Definition D3D11Texture.cpp:1154
void * GetIHVResourceHandle() const
Definition D3D11Resources.h:244
bool IsTexture3D() const
Definition D3D11Resources.h:219
ID3D11DepthStencilView * GetDepthStencilView(FExclusiveDepthStencil AccessType) const
Definition D3D11Resources.h:275
void FinalizeCreation(ID3D11Resource *InResource, ID3D11ShaderResourceView *InShaderResourceView, int32 InRTVArraySize, bool bInCreatedRTVsPerSlice, TConstArrayView< TRefCountPtr< ID3D11RenderTargetView > > InRenderTargetViews, TConstArrayView< TRefCountPtr< ID3D11DepthStencilView > > InDepthStencilViews)
Definition D3D11Texture.cpp:1601
bool IsCubemap() const
Definition D3D11Resources.h:194
EAliasResourceParam
Definition D3D11Resources.h:179
@ CreateAlias
Definition D3D11Resources.h:179
ID3D11ShaderResourceView * GetShaderResourceView() const
Definition D3D11Resources.h:192
ID3D11Texture3D * GetD3D11Texture3D() const
Definition D3D11Resources.h:211
ID3D11Resource * GetResource() const
Definition D3D11Resources.h:191
virtual void * GetNativeShaderResourceView() const override
Definition D3D11Resources.h:229
Definition D3D11Resources.h:390
TArray< TRefCountPtr< FRHIResource > > & GetResourceTable()
Definition D3D11Resources.h:412
FRingAllocation RingAllocation
Definition D3D11Resources.h:397
FD3D11UniformBuffer(class FD3D11DynamicRHI *InD3D11RHI, const FRHIUniformBufferLayout *InLayout, ID3D11Buffer *InResource, const FRingAllocation &InRingAllocation, bool bInAllocatedFromPool)
Definition D3D11Resources.h:400
TRefCountPtr< ID3D11Buffer > Resource
Definition D3D11Resources.h:394
virtual ~FD3D11UniformBuffer()
Definition D3D11UniformBuffer.cpp:361
Definition D3D11Resources.h:557
FD3D11ViewableResource * GetBaseResource() const
Definition D3D11UAV.cpp:116
TRefCountPtr< ID3D11UnorderedAccessView > View
Definition D3D11Resources.h:559
virtual void UpdateView() override
Definition D3D11UAV.cpp:22
Definition D3D11Resources.h:27
uint16 StreamStrides[MaxVertexElementCount]
Definition D3D11Resources.h:32
FD3D11VertexDeclaration(const FD3D11VertexElements &InElements, const uint16 *InStrides)
Definition D3D11Resources.h:35
FD3D11VertexElements VertexElements
Definition D3D11Resources.h:30
Definition D3D11Resources.h:52
int32 Offset
Definition D3D11Resources.h:63
@ StaticFrequency
Definition D3D11Resources.h:54
TArray< uint8 > Code
Definition D3D11Resources.h:60
TRefCountPtr< ID3D11VertexShader > Resource
Definition D3D11Resources.h:57
Definition D3D11Resources.h:533
virtual ~FD3D11View()
Definition D3D11Resources.h:535
virtual void UpdateView()=0
Definition D3D11Resources.h:132
void UpdateLinkedViews()
Definition D3D11SRV.cpp:5
~FD3D11ViewableResource()
Definition D3D11Resources.h:134
bool HasLinkedViews() const
Definition D3D11Resources.h:139
Definition RHIResources.h:409
static const uint32 MaxIndex
Definition RHIResources.h:652
uint32 GetIndex() const
Definition RHIResources.h:623
Definition NameTypes.h:617
Definition RHIResources.h:733
Definition RHIResources.h:1581
uint32 GetSize() const
Definition RHIResources.h:1595
Definition RHICommandList.h:455
Definition RHICommandList.h:4626
Definition RHIResources.h:1018
Definition RHIResources.h:2387
Definition RHIResources.h:978
Definition RHIResources.h:972
Definition RHIResources.h:2444
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:3304
Definition RHIResources.h:3981
Definition RHIResources.h:2153
virtual const FRHITextureDesc & GetDesc() const
Definition RHIResources.h:2170
Definition RHIResources.h:1232
TArray< TRefCountPtr< FRHIResource > > ResourceTable
Definition RHIResources.h:1255
Definition RHIResources.h:3294
Definition RHIResources.h:725
Definition RHIResources.h:954
FRHIViewDesc const ViewDesc
Definition RHIResources.h:3290
Definition RHIResources.h:1265
FName GetName() const
Definition RHIResources.h:1272
FName Name
Definition RHIResources.h:1310
Definition RHI.Build.cs:8
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition List.h:349
void Unlink()
Definition List.h:132
Definition Queue.h:48
Definition RefCounting.h:454
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
Definition D3D11Resources.h:527
void UpdateBufferStats(FD3D11Buffer &Buffer, bool bAllocating)
Definition D3D11RHI.cpp:589
void UpdateUniformBufferStats(ID3D11Buffer *Buffer, int64 BufferSize, bool bAllocating)
Definition D3D11RHI.cpp:583
Definition D3D11Resources.h:43
bool bIsSm6Shader
Definition D3D11Resources.h:46
TArray< FShaderCodeVendorExtension > VendorExtensions
Definition D3D11Resources.h:44
bool bShaderNeedsGlobalConstantBuffer
Definition D3D11Resources.h:45
uint16 UAVMask
Definition D3D11Resources.h:47
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition RHIResources.h:1417
uint64 Size
Definition DynamicRHI.h:122
Definition MultiGPU.h:33
Definition DynamicRHI.h:149
Definition DynamicRHI.h:198
Definition RHI.h:543
FName Name
Definition RHI.h:544
Definition RHIResources.h:1938
Definition RHIResources.h:1689
ETextureDimension Dimension
Definition RHIResources.h:1871
Definition RHIResources.h:1150
Definition RHIResources.h:2648
Definition D3D11Resources.h:378
ID3D11Buffer * Buffer
Definition D3D11Resources.h:379
FRingAllocation()
Definition D3D11Resources.h:384
uint32 Offset
Definition D3D11Resources.h:381
void * DataPtr
Definition D3D11Resources.h:380
bool IsValid() const
Definition D3D11Resources.h:385
uint32 Size
Definition D3D11Resources.h:382
FD3D11BoundShaderState TConcreteType
Definition D3D11Resources.h:599
FD3D11Buffer TConcreteType
Definition D3D11Resources.h:614
FD3D11ComputeShader TConcreteType
Definition D3D11Resources.h:594
FD3D11GPUFence TConcreteType
Definition D3D11Resources.h:625
FD3D11GeometryShader TConcreteType
Definition D3D11Resources.h:584
FD3D11PixelShader TConcreteType
Definition D3D11Resources.h:589
FD3D11RenderQuery_RHI TConcreteType
Definition D3D11Resources.h:604
FD3D11ShaderResourceView TConcreteType
Definition D3D11Resources.h:630
FD3D11StagingBuffer TConcreteType
Definition D3D11Resources.h:619
FD3D11UniformBuffer TConcreteType
Definition D3D11Resources.h:609
FD3D11UnorderedAccessView TConcreteType
Definition D3D11Resources.h:635
FD3D11VertexDeclaration TConcreteType
Definition D3D11Resources.h:574
FD3D11VertexShader TConcreteType
Definition D3D11Resources.h:579
Definition D3D11Resources.h:569
Definition UnrealTypeTraits.h:335
Definition UnrealTypeTraits.h:347