# Juliet\src\Graphics\D3D12\D3D12Common

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

## AI Description
The `D3D12StagingDescriptorPool` class in the provided C++ component is designed to manage a pool of staging descriptors for Direct3D 12. It uses an arena-based memory allocator to efficiently allocate and deallocate descriptor handles, ensuring that resources are managed efficiently without fragmentation. The pool supports creating new heaps as needed when the existing ones run out of free descriptors. This class is crucial for transferring data between CPU and GPU in a high-performance graphics application using Direct3D 12.

## Symbols

### Namespace `Juliet::D3D12`

#### Classes, Structs & Unions
- `struct D3D12StagingDescriptorPool`
- `struct D3D12StagingDescriptor`

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

#### Functions & Methods
- `extern D3D12StagingDescriptorPool* CreateStagingDescriptorPool(NonNullPtr<D3D12Driver> driver, D3D12_DESCRIPTOR_HEAP_TYPE type)`
- `extern bool AssignStagingDescriptor(NonNullPtr<D3D12Driver> driver, D3D12_DESCRIPTOR_HEAP_TYPE type,
                                            D3D12StagingDescriptor& outDescriptor)`
- `extern void ReleaseStagingDescriptor(NonNullPtr<D3D12Driver> driver, D3D12StagingDescriptor& cpuDescriptor)`
- `extern void DestroyStagingDescriptorPool(NonNullPtr<D3D12StagingDescriptorPool> pool)`

