# Juliet\src\Graphics\D3D12\D3D12DescriptorHeap

## Source Files
- Header: `Juliet\src\Graphics\D3D12\D3D12DescriptorHeap.h`
- Source: `Juliet\src\Graphics\D3D12\D3D12DescriptorHeap.cpp`

## AI Description
This C++ component is designed to manage descriptor heaps in a DirectX 12 graphics environment. It includes functions for creating, destroying, and managing descriptor heaps, including CPU and GPU heaps. The component uses an arena-based memory allocator to efficiently allocate and deallocate descriptors, ensuring that the heap management is both efficient and easy to use. The component also provides functions for acquiring and releasing sampler heaps from a pool, which helps in optimizing resource usage by reusing descriptor heaps.

## Symbols

### Namespace `Juliet::D3D12::Internal`

#### Classes, Structs & Unions
- `struct D3D12DescriptorHeap`
- `struct D3D12Descriptor`
- `struct D3D12DescriptorHeapPool`

#### Functions & Methods
- `extern void CreateDescriptorHeapPool(NonNullPtr<D3D12Driver> driver, D3D12DescriptorHeapPool& heapPool,
                                         D3D12_DESCRIPTOR_HEAP_TYPE type, uint32 count)`
- `extern void DestroyDescriptorHeapPool(D3D12DescriptorHeapPool& pool)`
- `extern D3D12DescriptorHeap* CreateDescriptorHeap(NonNullPtr<D3D12Driver> driver, NonNullPtr<Arena> arena,
                                                     D3D12_DESCRIPTOR_HEAP_TYPE type, uint32 count, bool isStaging)`
- `extern void DestroyDescriptorHeap(NonNullPtr<D3D12DescriptorHeap> heap)`
- `extern D3D12DescriptorHeap* AcquireSamplerHeapFromPool(NonNullPtr<D3D12Driver> d3d12Driver)`
- `extern void ReturnSamplerHeapToPool(NonNullPtr<D3D12Driver> d3d12Driver, NonNullPtr<D3D12DescriptorHeap> heap)`
- `extern bool AssignDescriptor(D3D12DescriptorHeap* heap, D3D12Descriptor& outDescriptor)`
- `extern void ReleaseDescriptor(const D3D12Descriptor& descriptor)`

