10#include "Containers/Queue.h"
41#define VERIFYD3D12RESULT_LAMBDA(x, Device, Lambda) {HRESULT hres = x; if (FAILED(hres)) { VerifyD3D12Result(hres, #x, __FILE__, __LINE__, Device, Lambda()); }}
42#define VERIFYD3D12RESULT_EX(x, Device) {HRESULT hres = x; if (FAILED(hres)) { VerifyD3D12Result(hres, #x, __FILE__, __LINE__, Device); }}
43#define VERIFYD3D12RESULT(x) {HRESULT hres = x; if (FAILED(hres)) { VerifyD3D12Result(hres, #x, __FILE__, __LINE__, nullptr); }}
44#define VERIFYD3D12CREATETEXTURERESULT(x, Desc, Device) {HRESULT hres = x; if (FAILED(hres)) { VerifyD3D12CreateTextureResult(hres, #x, __FILE__, __LINE__, Desc, Device); }}
74#if PLATFORM_SUPPORTS_MESH_SHADERS
213 template<
class ClassType>
265 int32 NumActiveTargets;
298 template <
typename CompareFunc>
299 bool Dequeue(Type& Result,
const CompareFunc& Func)
303 if (Items.
Peek(Result))
317 template <
typename ResultType,
typename CompareFunc>
324 while (Items.
Peek(Item) && i <= MaxItems)
330 Result.Emplace(Item);
346 return Items.
Peek(Result);
360 while (Items.
Dequeue(Result)) {}
400 return uint64((Width + Shape.WidthInTexels - 1) / Shape.WidthInTexels) *
401 ((Height + Shape.HeightInTexels - 1) / Shape.HeightInTexels) *
402 ((
Depth + Shape.DepthInTexels - 1) / Shape.DepthInTexels);
415 check(!UE::DXGIUtilities::IsBlockCompressedFormat(DXGIFormat));
424 if (UE::DXGIUtilities::IsBlockCompressedFormat(DXGIFormat))
429 pTileShape->WidthInTexels = 16 * UE::DXGIUtilities::GetWidthAlignment(DXGIFormat);
430 pTileShape->HeightInTexels = 16 * UE::DXGIUtilities::GetHeightAlignment(DXGIFormat);
472 if (SampleCount <= 1)
475 else if (SampleCount <= 2)
480 else if (SampleCount <= 4)
485 else if (SampleCount <= 8)
490 else if (SampleCount <= 16)
500 check(UE::DXGIUtilities::GetWidthAlignment(DXGIFormat) == 1);
501 check(UE::DXGIUtilities::GetHeightAlignment(DXGIFormat) == 1);
508 if (UE::DXGIUtilities::IsBlockCompressedFormat(DXGIFormat))
513 pTileShape->WidthInTexels = 8 * UE::DXGIUtilities::GetWidthAlignment(DXGIFormat);
514 pTileShape->HeightInTexels = 8 * UE::DXGIUtilities::GetHeightAlignment(DXGIFormat);
562 check(UE::DXGIUtilities::GetWidthAlignment(DXGIFormat) == 1);
563 check(UE::DXGIUtilities::GetHeightAlignment(DXGIFormat) == 1);
570#define ASSERT_RESOURCE_STATES 0
572#if ASSERT_RESOURCE_STATES
599 switch (PrimitiveType)
605 #if defined(D3D12RHI_PRIMITIVE_TOPOLOGY_RECTLIST)
616#pragma warning(disable: 4063)
619 switch (PrimitiveType)
636 #if defined(D3D12RHI_PRIMITIVE_TOPOLOGY_RECTLIST)
688 IncompatibilityReason.Append(
TEXT(
"D3D12_RESOURCE_STATE_RENDER_TARGET requires D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET.\n"));
698 IncompatibilityReason.Append(
TEXT(
"D3D12_RESOURCE_STATE_DEPTH_WRITE or D3D12_RESOURCE_STATE_DEPTH_READ requires D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL.\n"));
708 IncompatibilityReason.Append(
TEXT(
"D3D12_RESOURCE_STATE_UNORDERED_ACCESS requires D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS.\n"));
718 IncompatibilityReason.Append(
TEXT(
"D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE or D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE cannot be used with D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE.\n"));
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
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
#define DX_MAX_MSAA_COUNT
Definition D3D12RHIDefinitions.h:10
void SetD3D12ResourceName(FD3D12ResourceLocation &ResourceLocation, const TCHAR *Name)
Definition D3D12Util.cpp:77
bool IsGPUOnly(D3D12_HEAP_TYPE HeapType, const D3D12_HEAP_PROPERTIES *pCustomHeapProperties=nullptr)
Definition D3D12Util.h:372
FORCEINLINE uint32 GetD3D12CubeFace(ECubeFace Face)
Definition D3D12Util.h:165
FORCEINLINE_DEBUGGABLE D3D12_PRIMITIVE_TOPOLOGY_TYPE TranslatePrimitiveTopologyType(EPrimitiveTopologyType TopologyType)
Definition D3D12Util.h:583
FORCEINLINE_DEBUGGABLE bool CheckResourceStateCompatibility(D3D12_RESOURCE_STATES State, D3D12_RESOURCE_FLAGS Flags, FString &IncompatibilityReason)
Definition D3D12Util.h:681
FORCEINLINE_DEBUGGABLE uint32 GetMaxMSAAQuality(uint32 SampleCount)
Definition D3D12Util.h:651
bool ShouldSetD3D12ResourceName(const FD3D12ResourceLocation &ResourceLocation)
Definition D3D12Util.cpp:47
FORCEINLINE_DEBUGGABLE D3D_PRIMITIVE_TOPOLOGY TranslatePrimitiveType(EPrimitiveType PrimitiveType)
Definition D3D12Util.h:597
bool IsCPUAccessible(D3D12_HEAP_TYPE HeapType, const D3D12_HEAP_PROPERTIES *pCustomHeapProperties=nullptr)
Definition D3D12Util.h:380
FORCEINLINE uint32 CalcSubresource(uint32 MipSlice, uint32 ArraySlice, uint32 MipLevels)
Definition D3D12Util.h:188
FORCEINLINE_DEBUGGABLE D3D12_PRIMITIVE_TOPOLOGY_TYPE D3D12PrimitiveTypeToTopologyType(D3D_PRIMITIVE_TOPOLOGY PrimitiveType)
Definition D3D12Util.h:617
void SetD3D12ObjectName(ID3D12Object *Object, const TCHAR *Name)
Definition D3D12Util.cpp:57
ED3D12Access DetermineInitialBufferD3D12Access(D3D12_HEAP_TYPE HeapType, const D3D12_HEAP_PROPERTIES *pCustomHeapProperties=nullptr)
Definition D3D12Util.h:385
EShaderVisibility
Definition D3D12Util.h:70
@ SV_Geometry
Definition D3D12Util.h:73
@ SV_All
Definition D3D12Util.h:78
@ SV_ShaderVisibilityCount
Definition D3D12Util.h:79
@ SV_Pixel
Definition D3D12Util.h:72
@ SV_Vertex
Definition D3D12Util.h:71
FString GetD312ObjectName(ID3D12Object *const Object)
Definition D3D12Util.cpp:103
bool IsCPUWritable(D3D12_HEAP_TYPE HeapType, const D3D12_HEAP_PROPERTIES *pCustomHeapProperties=nullptr)
Definition D3D12Util.h:364
void LogExecuteCommandLists(uint32 NumCommandLists, ID3D12CommandList *const *ppCommandLists)
Definition D3D12Util.cpp:1662
ERootSignatureType
Definition D3D12Util.h:83
@ RS_WorkGraphLocalCompute
Definition D3D12Util.h:88
@ RS_RayTracingLocal
Definition D3D12Util.h:86
@ RS_WorkGraphLocalRaster
Definition D3D12Util.h:89
@ RS_Raster
Definition D3D12Util.h:84
@ RS_RayTracingGlobal
Definition D3D12Util.h:85
@ RS_WorkGraphGlobal
Definition D3D12Util.h:87
@ MaxSimultaneousRenderTargets
Definition RHIDefinitions.h:287
ECubeFace
Definition RHIDefinitions.h:525
@ CubeFace_NegX
Definition RHIDefinitions.h:527
@ CubeFace_PosX
Definition RHIDefinitions.h:526
@ CubeFace_NegY
Definition RHIDefinitions.h:529
@ CubeFace_NegZ
Definition RHIDefinitions.h:531
@ CubeFace_PosZ
Definition RHIDefinitions.h:530
@ CubeFace_PosY
Definition RHIDefinitions.h:528
EPrimitiveTopologyType
Definition RHIDefinitions.h:809
EPrimitiveType
Definition RHIDefinitions.h:822
@ PT_RectList
Definition RHIDefinitions.h:844
@ PT_PointList
Definition RHIDefinitions.h:837
@ PT_LineList
Definition RHIDefinitions.h:830
@ PT_TriangleList
Definition RHIDefinitions.h:824
@ PT_TriangleStrip
Definition RHIDefinitions.h:827
const char * source
Definition lz4.h:711
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
uint32 PointerHash(const void *Key)
Definition TypeHash.h:91
uint32 Size
Definition VulkanMemory.cpp:4034
Definition D3D12Adapter.h:136
FD3D12ResourceLocation ResourceLocation
Definition D3D12Resources.h:929
Definition D3D12Util.h:244
FORCEINLINE FD3D12RenderTargetView * GetRenderTargetView(int32 TargetIndex)
Definition D3D12Util.h:254
FORCEINLINE int32 GetNumActiveTargets() const
Definition D3D12Util.h:253
FORCEINLINE FD3D12DepthStencilView * GetDepthStencilView()
Definition D3D12Util.h:255
~FD3D12BoundRenderTargets()
Definition D3D12Util.cpp:1658
Definition D3D12Resources.h:1017
Definition D3D12View.h:435
Definition D3D12Device.h:176
Definition D3D12Util.h:197
uint32 GetHash() const
Definition D3D12Util.h:225
void * SourceObject
Definition D3D12Util.h:199
friend uint32 GetTypeHash(const FD3D12LockedKey &K)
Definition D3D12Util.h:231
FD3D12LockedKey(FD3D12Resource *source, uint32 subres=0)
Definition D3D12Util.h:206
bool operator==(const FD3D12LockedKey &Other) const
Definition D3D12Util.h:217
FD3D12LockedKey(class FD3D12ResourceLocation *source, uint32 subres=0)
Definition D3D12Util.h:209
FD3D12LockedKey(ClassType *source, uint32 subres=0)
Definition D3D12Util.h:214
FD3D12LockedKey()
Definition D3D12Util.h:203
uint32 Subresource
Definition D3D12Util.h:200
bool operator!=(const FD3D12LockedKey &Other) const
Definition D3D12Util.h:221
Definition D3D12View.h:423
Definition D3D12Resources.h:641
Definition D3D12Resources.h:181
Definition D3D12Texture.h:31
Definition D3D12View.h:221
Definition RHIShaderBindingLayout.h:72
Definition ScopeLock.h:141
bool Peek(FElementType &OutItem) const
Definition Queue.h:219
bool IsEmpty() const
Definition Queue.h:206
bool Enqueue(const FElementType &Item)
Definition Queue.h:123
bool Dequeue(FElementType &OutItem)
Definition Queue.h:80
Definition StaticArray.h:26
Definition D3D12CommandList.cpp:417
void VerifyD3D12CreateTextureResult(HRESULT D3DResult, const ANSICHAR *Code, const ANSICHAR *Filename, uint32 Line, const D3D12_RESOURCE_DESC &TextureDesc, ID3D12Device *Device)
Definition D3D12Util.cpp:1114
void VerifyD3D12Result(HRESULT D3DResult, const ANSICHAR *Code, const ANSICHAR *Filename, uint32 Line, ID3D12Device *Device, FString Message)
Definition D3D12Util.cpp:1100
void LogPageFaultData(class FD3D12Adapter *InAdapter, FD3D12Device *InDevice, D3D12_GPU_VIRTUAL_ADDRESS InPageFaultAddress)
U16 Index
Definition radfft.cpp:71
Definition D3D12Util.h:118
uint8 Flags
Definition D3D12Util.h:134
uint8 bUseRootConstants
Definition D3D12Util.h:131
friend uint32 GetTypeHash(const FD3D12QuantizedBoundShaderState &State)
Definition D3D12Util.h:145
uint8 bUseDirectlyIndexedResourceHeap
Definition D3D12Util.h:129
ERootSignatureType RootSignatureType
Definition D3D12Util.h:121
bool operator==(const FD3D12QuantizedBoundShaderState &RHS) const
Definition D3D12Util.h:137
TStaticArray< FShaderRegisterCounts, SV_ShaderVisibilityCount > RegisterCounts
Definition D3D12Util.h:120
uint8 bAllowIAInputLayout
Definition D3D12Util.h:126
uint8 bUseDiagnosticBuffer
Definition D3D12Util.h:128
static void InitShaderRegisterCounts(D3D12_RESOURCE_BINDING_TIER ResourceBindingTier, const FShaderCodePackedResourceCounts &Counts, FShaderRegisterCounts &Shader, bool bAllowUAVs=false)
Definition D3D12Util.cpp:1136
uint8 bNeedsAgsIntrinsicsSpace
Definition D3D12Util.h:127
uint8 bUseDirectlyIndexedSamplerHeap
Definition D3D12Util.h:130
uint8 Padding
Definition D3D12Util.h:132
FRHIShaderBindingLayout ShaderBindingLayout
Definition D3D12Util.h:119
Definition D3D12Util.h:665
~FD3D12ScopeLock()
Definition D3D12Util.h:668
FD3D12ScopeLock(FCriticalSection *CritSec)
Definition D3D12Util.h:667
Definition D3D12Util.h:674
~FD3D12ScopeNoLock()
Definition D3D12Util.h:677
FD3D12ScopeNoLock(FCriticalSection *CritSec)
Definition D3D12Util.h:676
Definition D3D12View.h:109
Definition ShaderCore.h:773
Definition D3D12Util.h:93
uint8 UnorderedAccessCount
Definition D3D12Util.h:97
bool operator==(const FShaderRegisterCounts &RHS) const
Definition D3D12Util.h:99
uint8 SamplerCount
Definition D3D12Util.h:94
uint8 ConstantBufferCount
Definition D3D12Util.h:95
uint8 ShaderResourceCount
Definition D3D12Util.h:96
friend uint32 GetTypeHash(const FShaderRegisterCounts &Counts)
Definition D3D12Util.h:107
Definition D3D12Util.h:275
const uint32 GetSize() const
Definition D3D12Util.h:282
bool Peek(Type &Result)
Definition D3D12Util.h:343
bool Dequeue(Type &Result, const CompareFunc &Func)
Definition D3D12Util.h:299
void Enqueue(const Type &Item)
Definition D3D12Util.h:284
void Empty()
Definition D3D12Util.h:355
bool Dequeue(Type &Result)
Definition D3D12Util.h:291
bool BatchDequeue(TArray< ResultType > &Result, const CompareFunc &Func, uint32 MaxItems)
Definition D3D12Util.h:318
bool IsEmpty()
Definition D3D12Util.h:349