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 {
 
  292        static std::variant<std::unique_ptr<DirectXDescriptorHeap>, 
Error>
 
  305        std::variant<std::shared_ptr<ContinuousDirectXDescriptorRange>, 
Error>
 
  307            const std::string& sRangeName, 
const std::function<
void()>& onRangeIndicesChanged);
 
  410            CD3DX12_CPU_DESCRIPTOR_HANDLE heapHandle,
 
  412            DirectXDescriptorType descriptorType,
 
  413            std::optional<size_t> cubemapFaceIndex) 
const;
 
  440        [[nodiscard]] std::variant<bool, Error>
 
  455        [[nodiscard]] std::optional<Error>
 
  499            DirectXDescriptorType descriptorType,
 
  500            const std::shared_ptr<ContinuousDirectXDescriptorRange>& pRange = 
nullptr,
 
  501            bool bBindDescriptorsToCubemapFaces = 
true);
 
Definition: DirectXDescriptorHeap.h:45
 
size_t getRangeSize()
Definition: DirectXDescriptorHeap.cpp:1107
 
const std::string sRangeName
Definition: DirectXDescriptorHeap.h:192
 
std::variant< std::optional< INT >, Error > tryReserveFreeHeapIndexToCreateDescriptor()
Definition: DirectXDescriptorHeap.cpp:1169
 
INT getRangeStartInHeap()
Definition: DirectXDescriptorHeap.cpp:1117
 
size_t getRangeCapacity()
Definition: DirectXDescriptorHeap.cpp:1112
 
D3D12_GPU_DESCRIPTOR_HANDLE getGpuDescriptorHandleToRangeStart() const
Definition: DirectXDescriptorHeap.cpp:1122
 
const std::function< void()> onRangeIndicesChanged
Definition: DirectXDescriptorHeap.h:189
 
DirectXDescriptorHeap *const pHeap
Definition: DirectXDescriptorHeap.h:195
 
std::optional< Error > markDescriptorAsUnused(DirectXDescriptor *pDescriptor)
Definition: DirectXDescriptorHeap.cpp:1147
 
static constexpr INT iRangeGrowSize
Definition: DirectXDescriptorHeap.h:202
 
static constexpr INT getRangeGrowSize()
Definition: DirectXDescriptorHeap.h:69
 
std::pair< std::recursive_mutex, InternalData > mtxInternalData
Definition: DirectXDescriptorHeap.h:186
 
std::string getRangeName() const
Definition: DirectXDescriptorHeap.h:107
 
Definition: DirectXDescriptorHeap.h:206
 
INT getHeapSize()
Definition: DirectXDescriptorHeap.cpp:254
 
static std::string convertHeapTypeToString(DescriptorHeapType heapType)
Definition: DirectXDescriptorHeap.cpp:264
 
void onDescriptorRangeBeingDestroyed(ContinuousDirectXDescriptorRange *pRange)
Definition: DirectXDescriptorHeap.cpp:476
 
static std::variant< std::unique_ptr< DirectXDescriptorHeap >, Error > create(DirectXRenderer *pRenderer, DescriptorHeapType heapType)
Definition: DirectXDescriptorHeap.cpp:11
 
DirectXRenderer * pRenderer
Definition: DirectXDescriptorHeap.h:524
 
static constexpr INT getHeapGrowSize()
Definition: DirectXDescriptorHeap.h:282
 
std::variant< std::shared_ptr< ContinuousDirectXDescriptorRange >, Error > allocateContinuousDescriptorRange(const std::string &sRangeName, const std::function< void()> &onRangeIndicesChanged)
Definition: DirectXDescriptorHeap.cpp:62
 
void onDescriptorBeingDestroyed(DirectXDescriptor *pDescriptor, ContinuousDirectXDescriptorRange *pRange=nullptr)
Definition: DirectXDescriptorHeap.cpp:369
 
D3D12_DESCRIPTOR_HEAP_TYPE d3dHeapType
Definition: DirectXDescriptorHeap.h:539
 
std::string sHeapType
Definition: DirectXDescriptorHeap.h:536
 
std::optional< Error > expandRange(ContinuousDirectXDescriptorRange *pRange)
Definition: DirectXDescriptorHeap.cpp:591
 
std::variant< bool, Error > shrinkHeapIfPossible(ContinuousDirectXDescriptorRange *pChangedRange)
Definition: DirectXDescriptorHeap.cpp:623
 
~DirectXDescriptorHeap()
Definition: DirectXDescriptorHeap.cpp:335
 
std::vector< DirectXDescriptorType > getDescriptorTypesHandledByThisHeap() const
Definition: DirectXDescriptorHeap.cpp:970
 
UINT getDescriptorSize() const
Definition: DirectXDescriptorHeap.h:341
 
std::optional< Error > assignDescriptor(DirectXResource *pResource, DirectXDescriptorType descriptorType, const std::shared_ptr< ContinuousDirectXDescriptorRange > &pRange=nullptr, bool bBindDescriptorsToCubemapFaces=true)
Definition: DirectXDescriptorHeap.cpp:84
 
static bool isShrinkingPossible(INT iSize, INT iCapacity, INT iGrowSize)
Definition: DirectXDescriptorHeap.cpp:569
 
std::pair< std::recursive_mutex, InternalData > mtxInternalData
Definition: DirectXDescriptorHeap.h:527
 
DescriptorHeapType heapType
Definition: DirectXDescriptorHeap.h:533
 
std::pair< std::recursive_mutex, InternalData > * getInternalData()
Definition: DirectXDescriptorHeap.h:357
 
std::optional< Error > expandHeap(ContinuousDirectXDescriptorRange *pChangedRange)
Definition: DirectXDescriptorHeap.cpp:521
 
size_t getNoLongerUsedDescriptorCount()
Definition: DirectXDescriptorHeap.cpp:259
 
std::optional< Error > rebindViewsUpdateIndices()
Definition: DirectXDescriptorHeap.cpp:987
 
UINT iDescriptorSize
Definition: DirectXDescriptorHeap.h:530
 
ID3D12DescriptorHeap * getInternalHeap() const
Definition: DirectXDescriptorHeap.h:348
 
void createView(CD3DX12_CPU_DESCRIPTOR_HANDLE heapHandle, const DirectXResource *pResource, DirectXDescriptorType descriptorType, std::optional< size_t > cubemapFaceIndex) const
Definition: DirectXDescriptorHeap.cpp:645
 
INT getHeapCapacity()
Definition: DirectXDescriptorHeap.cpp:249
 
static constexpr INT iHeapGrowSize
Definition: DirectXDescriptorHeap.h:542
 
std::optional< Error > createHeap(INT iCapacity, ContinuousDirectXDescriptorRange *pChangedRange)
Definition: DirectXDescriptorHeap.cpp:914
 
Definition: DirectXDescriptor.h:21
 
Definition: DirectXRenderer.h:36
 
Definition: DirectXResource.h:33
 
Definition: DirectXDescriptorHeap.h:111
 
std::unordered_set< DirectXDescriptor * > allocatedDescriptors
Definition: DirectXDescriptorHeap.h:120
 
INT iRangeStartInHeap
Definition: DirectXDescriptorHeap.h:131
 
INT iRangeCapacity
Definition: DirectXDescriptorHeap.h:134
 
std::queue< INT > noLongerUsedDescriptorIndices
Definition: DirectXDescriptorHeap.h:123
 
INT iNextFreeIndexInRange
Definition: DirectXDescriptorHeap.h:144
 
Definition: DirectXDescriptorHeap.h:218
 
std::queue< INT > noLongerUsedSingleDescriptorIndices
Definition: DirectXDescriptorHeap.h:256
 
std::unordered_set< ContinuousDirectXDescriptorRange * > continuousDescriptorRanges
Definition: DirectXDescriptorHeap.h:228
 
std::unordered_set< DirectXDescriptor * > bindedSingleDescriptors
Definition: DirectXDescriptorHeap.h:267
 
INT iNextFreeHeapIndex
Definition: DirectXDescriptorHeap.h:248
 
INT iHeapCapacity
Definition: DirectXDescriptorHeap.h:231
 
INT iHeapSize
Definition: DirectXDescriptorHeap.h:238
 
ComPtr< ID3D12DescriptorHeap > pHeap
Definition: DirectXDescriptorHeap.h:220