# Juliet\src\Graphics\D3D12\D3D12GraphicsDevice

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

## AI Description
The provided code snippet is a part of a graphics driver implementation for DirectX 12. It includes functions to initialize and shutdown debugging features for the graphics device. The `InitializeDXGIDebug` function sets up the debug interface for DXGI (DirectX Graphics Infrastructure), while the `InitializeD3D12DebugLayer` function enables the debug layer in D3D12.

The `OnD3D12DebugInfoMsg` callback function is used to handle debug messages generated by the graphics driver. It logs these messages at different severity levels, such as ERROR and WARNING, using the `LogWarning` function from the `Log` module.

Here's a breakdown of the key functions and their functionalities:

1. **InitializeDXGIDebug**:
   - Loads the DXGI debug DLL.
   - Retrieves the IDXGIDebug interface.
   - Sets up the break-on-severity for different message severities.
   - Reports live objects to the debug interface.

2. **ShutdownDXGIDebug**:
   - Releases the IDXGIDebug interface and the debug DLL.

3. **InitializeD3D12DebugLayer**:
   - Retrieves the ID3D12Debug interface using `D3D12GetDebugInterfaceFunc`.
   - Enables the debug layer in D3D12.

4. **OnD3D12DebugInfoMsg**:
   - Registers a message callback for handling debug messages.
   - Logs debug messages at different severity levels.

This setup is crucial for debugging issues related to DirectX 12, such as resource management, shader compilation, and execution errors.

## Symbols

### Namespace `Juliet::D3D12`

#### Classes, Structs & Unions
- `struct D3D12WindowData`
- `struct D3D12Driver`

#### Enums
- `enum class RootParameters`

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

#### Functions & Methods
- `void DisposePendingResourcces(NonNullPtr<D3D12Driver> driver)`

