Files
XCEngine/docs/api/rhi/d3d12/d3d12-device.md

170 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# D3D12Device
DirectX 12 设备的 D3D12 实现,是引擎的 RHI 抽象层 `RHIDevice` 接口的具体实现。
## 头文件
```cpp
#include <XCEngine/RHI/D3D12/D3D12Device.h>
```
## 类概览
`D3D12Device` 封装了 DirectX 12 的 `ID3D12Device``IDXGIFactory4`,负责创建和管理所有 RHI 资源。
## 公共成员函数
### 初始化与销毁
#### `bool Initialize(const RHIDeviceDesc& desc)`
初始化 D3D12 设备,包括创建 DXGI Factory 和 D3D12 Device。
- `desc`: 设备描述符,包含调试层配置等
- 返回: 初始化是否成功
#### `void Shutdown()`
关闭并释放所有 D3D12 资源。
### 设备信息
#### `ID3D12Device* GetDevice() const`
获取底层 `ID3D12Device` 指针。
#### `IDXGIFactory4* GetFactory() const`
获取底层 `IDXGIFactory4` 指针。
#### `const AdapterInfo& GetAdapterInfo() const`
获取当前 GPU 适配器信息,包含:
- `description`: 适配器描述
- `dedicatedVideoMemory`: 专用显存
- `dedicatedSystemMemory`: 专用系统内存
- `sharedSystemMemory`: 共享系统内存
- `vendorId` / `deviceId`: 供应商和设备 ID
- `isSoftware`: 是否为软件适配器
#### `std::vector<AdapterInfo> EnumerateAdapters()`
枚举系统中所有可用的 GPU 适配器。
### 功能查询
#### `UINT GetDescriptorHandleIncrementSize(DescriptorHeapType type) const`
获取指定类型描述符堆的增量大小。
- `type`: 堆类型 (CBV_SRV_UAV, Sampler, RTV, DSV)
#### `bool CheckFeatureSupport(D3D12_FEATURE feature, void* featureSupportData, uint32_t featureSupportDataSize)`
查询设备支持的特定功能。
#### `const RHICapabilities& GetCapabilities() const`
获取设备功能支持信息。
#### `const RHIDeviceInfo& GetDeviceInfo() const`
获取设备详细信息。
### 设备状态
#### `bool IsDeviceRemoved() const`
检测设备是否被移除(通常因驱动崩溃)。
### 资源创建
#### `RHIBuffer* CreateBuffer(const BufferDesc& desc)` {#buffer}
创建 D3D12 缓冲区。
#### `RHITexture* CreateTexture(const TextureDesc& desc)` {#texture}
创建 D3D12 纹理。
#### `RHISwapChain* CreateSwapChain(const SwapChainDesc& desc)` {#swapchain}
创建 D3D12 交换链。
#### `RHICommandList* CreateCommandList(const CommandListDesc& desc)` {#cmdlist}
创建 D3D12 命令列表。
#### `RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc)` {#cmdqueue}
创建 D3D12 命令队列。
#### `RHIShader* CompileShader(const ShaderCompileDesc& desc)` {#shader}
编译着色器。
#### `RHIPipelineState* CreatePipelineState(const PipelineStateDesc& desc)` {#pso}
创建管线状态对象。
#### `RHIFence* CreateFence(const FenceDesc& desc)` {#fence}
创建栅栏同步对象。
#### `RHISampler* CreateSampler(const SamplerDesc& desc)` {#sampler}
创建采样器。
### 内部实现创建
#### `D3D12CommandQueue* CreateCommandQueueImpl(const CommandQueueDesc& desc)`
创建 `D3D12CommandQueue` 实例。
#### `D3D12CommandList* CreateCommandListImpl(const CommandListDesc& desc)`
创建 `D3D12CommandList` 实例。
#### `D3D12CommandAllocator* CreateCommandAllocator(const CommandAllocatorDesc& desc)`
创建 `D3D12CommandAllocator`
#### `D3D12DescriptorHeap* CreateDescriptorHeap(const DescriptorHeapDesc& desc)`
创建 `D3D12DescriptorHeap`
#### `D3D12QueryHeap* CreateQueryHeap(const QueryHeapDesc& desc)`
创建 `D3D12QueryHeap`
#### `D3D12RootSignature* CreateRootSignature(const RootSignatureDesc& desc)`
创建 `D3D12RootSignature`
### 视图创建
#### `D3D12RenderTargetView* CreateRenderTargetView(D3D12Buffer* resource, const RenderTargetViewDesc& desc)`
创建渲染目标视图。
#### `D3D12DepthStencilView* CreateDepthStencilView(D3D12Buffer* resource, const DepthStencilViewDesc& desc)`
创建深度模板视图。
#### `D3D12ShaderResourceView* CreateShaderResourceView(D3D12Buffer* resource, const ShaderResourceViewDesc& desc)`
创建着色器资源视图。
#### `D3D12UnorderedAccessView* CreateUnorderedAccessView(D3D12Buffer* resource, const UnorderedAccessViewDesc& desc)`
创建无序访问视图。
#### `D3D12ConstantBufferView* CreateConstantBufferView(D3D12Buffer* resource, const ConstantBufferViewDesc& desc)`
创建常量缓冲区视图。
## 使用示例
```cpp
#include <XCEngine/RHI/D3D12/D3D12Device.h>
using namespace XCEngine::RHI;
D3D12Device device;
RHIDeviceDesc desc;
desc.enableDebugLayer = true;
if (device.Initialize(desc)) {
auto& caps = device.GetCapabilities();
auto& info = device.GetAdapterInfo();
// Create resources
BufferDesc vertexBufferDesc;
vertexBufferDesc.size = 1024;
vertexBufferDesc.type = BufferType::Vertex;
RHIBuffer* vb = device.CreateBuffer(vertexBufferDesc);
device.Shutdown();
}
```
## 继承关系
```
RHIDevice (interface)
└── D3D12Device (implementation)
```
## 备注
- D3D12Device 是引擎中最重要的 D3D12 对象,所有其他 D3D12 资源都依赖它创建
- 设备移除Device Removed通常由驱动超时或硬件问题导致
- 使用 `SetDeviceRemoved()` 可以模拟设备移除场景用于测试