6#include <unordered_set>
13#include "render/directx/descriptors/DirectXDescriptor.h"
14#include "render/general/resource/GpuResource.h"
15#include "DirectXDescriptorType.hpp"
18#include "directx/d3dx12.h"
19#include "misc/Error.h"
25 using namespace Microsoft::WRL;
27 class DirectXRenderer;
28 class DirectXResource;
29 class DirectXDescriptorHeap;
32 enum class DescriptorHeapType :
int {
291 static std::variant<std::unique_ptr<DirectXDescriptorHeap>,
Error>
304 std::variant<std::shared_ptr<ContinuousDirectXDescriptorRange>,
Error>
306 const std::string& sRangeName,
const std::function<
void()>& onRangeIndicesChanged);
409 CD3DX12_CPU_DESCRIPTOR_HANDLE heapHandle,
411 DirectXDescriptorType descriptorType,
412 std::optional<size_t> cubemapFaceIndex)
const;
439 [[nodiscard]] std::variant<bool, Error>
454 [[nodiscard]] std::optional<Error>
498 DirectXDescriptorType descriptorType,
499 const std::shared_ptr<ContinuousDirectXDescriptorRange>& pRange =
nullptr,
500 bool bBindDescriptorsToCubemapFaces =
true);
Definition: DirectXDescriptorHeap.h:44
size_t getRangeSize()
Definition: DirectXDescriptorHeap.cpp:1047
const std::string sRangeName
Definition: DirectXDescriptorHeap.h:191
std::variant< std::optional< INT >, Error > tryReserveFreeHeapIndexToCreateDescriptor()
Definition: DirectXDescriptorHeap.cpp:1109
INT getRangeStartInHeap()
Definition: DirectXDescriptorHeap.cpp:1057
size_t getRangeCapacity()
Definition: DirectXDescriptorHeap.cpp:1052
D3D12_GPU_DESCRIPTOR_HANDLE getGpuDescriptorHandleToRangeStart() const
Definition: DirectXDescriptorHeap.cpp:1062
const std::function< void()> onRangeIndicesChanged
Definition: DirectXDescriptorHeap.h:188
DirectXDescriptorHeap *const pHeap
Definition: DirectXDescriptorHeap.h:194
std::optional< Error > markDescriptorAsUnused(DirectXDescriptor *pDescriptor)
Definition: DirectXDescriptorHeap.cpp:1087
static constexpr INT iRangeGrowSize
Definition: DirectXDescriptorHeap.h:201
static constexpr INT getRangeGrowSize()
Definition: DirectXDescriptorHeap.h:68
std::pair< std::recursive_mutex, InternalData > mtxInternalData
Definition: DirectXDescriptorHeap.h:185
std::string getRangeName() const
Definition: DirectXDescriptorHeap.h:106
Definition: DirectXDescriptorHeap.h:205
INT getHeapSize()
Definition: DirectXDescriptorHeap.cpp:216
static std::string convertHeapTypeToString(DescriptorHeapType heapType)
Definition: DirectXDescriptorHeap.cpp:226
void onDescriptorRangeBeingDestroyed(ContinuousDirectXDescriptorRange *pRange)
Definition: DirectXDescriptorHeap.cpp:426
static std::variant< std::unique_ptr< DirectXDescriptorHeap >, Error > create(DirectXRenderer *pRenderer, DescriptorHeapType heapType)
Definition: DirectXDescriptorHeap.cpp:10
DirectXRenderer * pRenderer
Definition: DirectXDescriptorHeap.h:523
static constexpr INT getHeapGrowSize()
Definition: DirectXDescriptorHeap.h:281
std::variant< std::shared_ptr< ContinuousDirectXDescriptorRange >, Error > allocateContinuousDescriptorRange(const std::string &sRangeName, const std::function< void()> &onRangeIndicesChanged)
Definition: DirectXDescriptorHeap.cpp:24
void onDescriptorBeingDestroyed(DirectXDescriptor *pDescriptor, ContinuousDirectXDescriptorRange *pRange=nullptr)
Definition: DirectXDescriptorHeap.cpp:319
D3D12_DESCRIPTOR_HEAP_TYPE d3dHeapType
Definition: DirectXDescriptorHeap.h:538
std::string sHeapType
Definition: DirectXDescriptorHeap.h:535
std::optional< Error > expandRange(ContinuousDirectXDescriptorRange *pRange)
Definition: DirectXDescriptorHeap.cpp:541
std::variant< bool, Error > shrinkHeapIfPossible(ContinuousDirectXDescriptorRange *pChangedRange)
Definition: DirectXDescriptorHeap.cpp:573
~DirectXDescriptorHeap()
Definition: DirectXDescriptorHeap.cpp:285
std::vector< DirectXDescriptorType > getDescriptorTypesHandledByThisHeap() const
Definition: DirectXDescriptorHeap.cpp:912
UINT getDescriptorSize() const
Definition: DirectXDescriptorHeap.h:340
std::optional< Error > assignDescriptor(DirectXResource *pResource, DirectXDescriptorType descriptorType, const std::shared_ptr< ContinuousDirectXDescriptorRange > &pRange=nullptr, bool bBindDescriptorsToCubemapFaces=true)
Definition: DirectXDescriptorHeap.cpp:46
static bool isShrinkingPossible(INT iSize, INT iCapacity, INT iGrowSize)
Definition: DirectXDescriptorHeap.cpp:519
std::pair< std::recursive_mutex, InternalData > mtxInternalData
Definition: DirectXDescriptorHeap.h:526
DescriptorHeapType heapType
Definition: DirectXDescriptorHeap.h:532
std::pair< std::recursive_mutex, InternalData > * getInternalData()
Definition: DirectXDescriptorHeap.h:356
std::optional< Error > expandHeap(ContinuousDirectXDescriptorRange *pChangedRange)
Definition: DirectXDescriptorHeap.cpp:471
size_t getNoLongerUsedDescriptorCount()
Definition: DirectXDescriptorHeap.cpp:221
std::optional< Error > rebindViewsUpdateIndices()
Definition: DirectXDescriptorHeap.cpp:927
UINT iDescriptorSize
Definition: DirectXDescriptorHeap.h:529
ID3D12DescriptorHeap * getInternalHeap() const
Definition: DirectXDescriptorHeap.h:347
void createView(CD3DX12_CPU_DESCRIPTOR_HANDLE heapHandle, const DirectXResource *pResource, DirectXDescriptorType descriptorType, std::optional< size_t > cubemapFaceIndex) const
Definition: DirectXDescriptorHeap.cpp:595
INT getHeapCapacity()
Definition: DirectXDescriptorHeap.cpp:211
static constexpr INT iHeapGrowSize
Definition: DirectXDescriptorHeap.h:541
std::optional< Error > createHeap(INT iCapacity, ContinuousDirectXDescriptorRange *pChangedRange)
Definition: DirectXDescriptorHeap.cpp:858
Definition: DirectXDescriptor.h:21
Definition: DirectXRenderer.h:36
Definition: DirectXResource.h:32
Definition: DirectXDescriptorHeap.h:110
std::unordered_set< DirectXDescriptor * > allocatedDescriptors
Definition: DirectXDescriptorHeap.h:119
INT iRangeStartInHeap
Definition: DirectXDescriptorHeap.h:130
INT iRangeCapacity
Definition: DirectXDescriptorHeap.h:133
std::queue< INT > noLongerUsedDescriptorIndices
Definition: DirectXDescriptorHeap.h:122
INT iNextFreeIndexInRange
Definition: DirectXDescriptorHeap.h:143
Definition: DirectXDescriptorHeap.h:217
std::queue< INT > noLongerUsedSingleDescriptorIndices
Definition: DirectXDescriptorHeap.h:255
std::unordered_set< ContinuousDirectXDescriptorRange * > continuousDescriptorRanges
Definition: DirectXDescriptorHeap.h:227
std::unordered_set< DirectXDescriptor * > bindedSingleDescriptors
Definition: DirectXDescriptorHeap.h:266
INT iNextFreeHeapIndex
Definition: DirectXDescriptorHeap.h:247
INT iHeapCapacity
Definition: DirectXDescriptorHeap.h:230
INT iHeapSize
Definition: DirectXDescriptorHeap.h:237
ComPtr< ID3D12DescriptorHeap > pHeap
Definition: DirectXDescriptorHeap.h:219