|
Nameless Engine
|
#include <DirectXDescriptorHeap.h>
Classes | |
| struct | InternalData |
Public Member Functions | |
| DirectXDescriptorHeap (const DirectXDescriptorHeap &)=delete | |
| DirectXDescriptorHeap & | operator= (const DirectXDescriptorHeap &)=delete |
| ~DirectXDescriptorHeap () | |
| std::variant< std::shared_ptr< ContinuousDirectXDescriptorRange >, Error > | allocateContinuousDescriptorRange (const std::string &sRangeName, const std::function< void()> &onRangeIndicesChanged) |
| INT | getHeapCapacity () |
| INT | getHeapSize () |
| size_t | getNoLongerUsedDescriptorCount () |
| UINT | getDescriptorSize () const |
| ID3D12DescriptorHeap * | getInternalHeap () const |
| std::pair< std::recursive_mutex, InternalData > * | getInternalData () |
Static Public Member Functions | |
| static constexpr INT | getHeapGrowSize () |
| static std::variant< std::unique_ptr< DirectXDescriptorHeap >, Error > | create (DirectXRenderer *pRenderer, DescriptorHeapType heapType) |
Protected Member Functions | |
| DirectXDescriptorHeap (DirectXRenderer *pRenderer, DescriptorHeapType heapType) | |
| void | onDescriptorBeingDestroyed (DirectXDescriptor *pDescriptor, ContinuousDirectXDescriptorRange *pRange=nullptr) |
| void | onDescriptorRangeBeingDestroyed (ContinuousDirectXDescriptorRange *pRange) |
| void | createView (CD3DX12_CPU_DESCRIPTOR_HANDLE heapHandle, const DirectXResource *pResource, DirectXDescriptorType descriptorType, std::optional< size_t > cubemapFaceIndex) const |
| std::optional< Error > | expandHeap (ContinuousDirectXDescriptorRange *pChangedRange) |
| std::variant< bool, Error > | shrinkHeapIfPossible (ContinuousDirectXDescriptorRange *pChangedRange) |
| std::optional< Error > | createHeap (INT iCapacity, ContinuousDirectXDescriptorRange *pChangedRange) |
| std::vector< DirectXDescriptorType > | getDescriptorTypesHandledByThisHeap () const |
| std::optional< Error > | rebindViewsUpdateIndices () |
Static Protected Member Functions | |
| static std::string | convertHeapTypeToString (DescriptorHeapType heapType) |
Private Member Functions | |
| std::optional< Error > | assignDescriptor (DirectXResource *pResource, DirectXDescriptorType descriptorType, const std::shared_ptr< ContinuousDirectXDescriptorRange > &pRange=nullptr, bool bBindDescriptorsToCubemapFaces=true) |
| std::optional< Error > | expandRange (ContinuousDirectXDescriptorRange *pRange) |
Static Private Member Functions | |
| static bool | isShrinkingPossible (INT iSize, INT iCapacity, INT iGrowSize) |
Private Attributes | |
| DirectXRenderer * | pRenderer |
| std::pair< std::recursive_mutex, InternalData > | mtxInternalData |
| UINT | iDescriptorSize = 0 |
| DescriptorHeapType | heapType |
| std::string | sHeapType |
| D3D12_DESCRIPTOR_HEAP_TYPE | d3dHeapType |
Static Private Attributes | |
| static constexpr INT | iHeapGrowSize = 300 |
Friends | |
| class | DirectXDescriptor |
| class | ContinuousDirectXDescriptorRange |
| class | DirectXResource |
Represents a descriptor heap.
| ne::DirectXDescriptorHeap::~DirectXDescriptorHeap | ( | ) |
Makes sure no descriptor or range exists.
|
protected |
Constructor.
| pRenderer | DirectX renderer that owns this manager. |
| heapType | Type of the heap. |
| std::variant< std::shared_ptr< ContinuousDirectXDescriptorRange >, Error > ne::DirectXDescriptorHeap::allocateContinuousDescriptorRange | ( | const std::string & | sRangeName, |
| const std::function< void()> & | onRangeIndicesChanged | ||
| ) |
Allocates a continuous range of descriptors that can be used for bindless bindings of descriptor arrays.
| sRangeName | Name of the range (used for logging). |
| onRangeIndicesChanged | Callback that will be called after the range was moved in the heap due to things like heap expand/shrink. |
|
private |
Creates a new descriptor that points to the given resource, the descriptor is saved in the resource.
| pResource | Resource to point new descriptor to. |
| descriptorType | Type of the new descriptor. |
| pRange | Specify in order to allocate a descriptor from this range. The specified shared pointer will be copied and saved in the resource so that the range will not be destroyed while this resource references a descriptor from it. |
| bBindDescriptorsToCubemapFaces | If this resource is a cubemap, specify true to also bind descriptors that reference specific cubemap faces, specify false to only bind 1 descriptor that references the entire resource. |
|
staticprotected |
Converts heap type to string.
| heapType | Heap type to convert to text. |
|
static |
Creates a new manager that controls a specific heap.
| pRenderer | DirectX renderer that owns this manager. |
| heapType | Heap type that this manager will control. |
|
protected |
(Re)creates the heap with the specified capacity.
| iCapacity | Size of the heap (in descriptors). |
| pChangedRange | If this event was caused by changes in descriptor range, specify one for logging purposes. |
|
protected |
Creates a new view using the specified descriptor handle that will point to the specified resource.
| heapHandle | A place in the heap to create view. |
| pResource | Resource to bind to the new view. |
| descriptorType | Descriptor type. |
| cubemapFaceIndex | Specify empty if creating a view for the entire resource, otherwise specify index of the cubemap face to bind the descriptor to. |
|
protected |
Re-creates the heap to expand its capacity to support iHeapGrowSize more descriptors.
| pChangedRange | If this event was caused by changes in descriptor range, specify one for logging purposes. |
|
private |
Expands the specified descriptor range and expands or re-creates the heap to support updated range.
| pRange | Range to expand. |
|
inline |
Returns size of one descriptor in this heap.
|
protected |
Returns an array of descriptor types that this heap handles. For example: for RTV heap it will only be RTV descriptor type, for DSV - DSV, for CBV/UAV/SRV heap it will be CBV, UAV and SRV (3 types).
| INT ne::DirectXDescriptorHeap::getHeapCapacity | ( | ) |
Returns current heap capacity (allocated heap size).
This function is used for engine testing and generally should not be used outside of testing.
|
inlinestaticconstexpr |
Returns grow/shrink size for the heap.
| INT ne::DirectXDescriptorHeap::getHeapSize | ( | ) |
Returns current heap size (actually used heap size).
This function is used for engine testing and generally should not be used outside of testing.
|
inline |
Returns internal data of the object.
|
inline |
Returns internal DirectX heap.
| size_t ne::DirectXDescriptorHeap::getNoLongerUsedDescriptorCount | ( | ) |
Returns amount of descriptors that were created but no longer being used.
|
staticprivate |
Checks shrink condition: if capacity can be decremented by grow size with the current size.
| iSize | Current size. |
| iCapacity | Current capacity. |
| iGrowSize | Grow/shrink size. Expected to be even. |
true if capacity can be decremented by one grow size, false if not yet.
|
protected |
Marks resource descriptor as no longer being used so the descriptor's index can be reused by some other descriptor.
| pDescriptor | Descriptor that is being destroyed. |
| pRange | Range that allocated the descriptor (if the descriptor was allocated from a range). |
|
protected |
Notifies the heap about some range being destroyed.
| pRange | Range that is being destroyed. |
|
protected |
Recreates views for previously created descriptors so that they will reference the new re-created heap and reference the correct index inside of the heap.
|
protected |
Checks if the heap can be shrinked (based on the current internal state mtxInternalData) and if possible re-creates the heap to shrink its capacity to support iHeapGrowSize less descriptors.
| pChangedRange | If this event was caused by changes in descriptor range, specify one for logging purposes. |
true if heap was shrinked, false if no shrinking is needed yet.
|
private |
Direct3D type of this heap.
|
private |
Type of the heap.
|
private |
Size of one descriptor.
|
staticconstexprprivate |
Number of descriptors to add to the heap when there is no more free space left.
|
private |
Descriptor heap internal resources.
|
private |
Do not delete. Owner renderer.
|
private |
String version of heap type (used for logging).