Docs: Add D3D12 API documentation
This commit is contained in:
133
docs/api/d3d12/d3d12-device.md
Normal file
133
docs/api/d3d12/d3d12-device.md
Normal file
@@ -0,0 +1,133 @@
|
||||
# D3D12Device
|
||||
|
||||
**命名空间**: `XCEngine::RHI`
|
||||
|
||||
**类型**: `class`
|
||||
|
||||
**头文件**: `XCEngine/RHI/D3D12/D3D12Device.h`
|
||||
|
||||
**描述**: DirectX 12 图形设备封装类,负责创建和管理所有 DirectX 12 图形对象
|
||||
|
||||
## 概述
|
||||
|
||||
D3D12Device 是 DirectX 12 的核心设备类,封装了 ID3D12Device 接口。它负责枚举显示适配器、创建命令队列、缓冲区、纹理、描述符堆、管道状态对象等所有图形资源。D3D12Device 继承自 RHIDevice 接口,提供跨后端的统一设备管理抽象。
|
||||
|
||||
该类支持可选的调试层和 GPU 验证功能,便于开发阶段的问题诊断。
|
||||
|
||||
## 适配器信息结构体
|
||||
|
||||
### AdapterInfo
|
||||
|
||||
存储适配器详细信息的结构体。
|
||||
|
||||
| 成员 | 类型 | 描述 |
|
||||
|------|------|------|
|
||||
| `description` | `std::wstring` | 适配器描述名称 |
|
||||
| `dedicatedVideoMemory` | `uint64_t` | 专用视频内存大小(字节) |
|
||||
| `dedicatedSystemMemory` | `uint64_t` | 专用系统内存大小(字节) |
|
||||
| `sharedSystemMemory` | `uint64_t` | 共享系统内存大小(字节) |
|
||||
| `vendorId` | `uint32_t` | 硬件供应商 ID |
|
||||
| `deviceId` | `uint32_t` | 设备 ID |
|
||||
| `isSoftware` | `bool` | 是否为软件适配器 |
|
||||
|
||||
## 公共方法
|
||||
|
||||
| 方法 | 描述 |
|
||||
|------|------|
|
||||
| `D3D12Device()` | 默认构造函数 |
|
||||
| `~D3D12Device()` | 虚析构函数 |
|
||||
| [Initialize](d3d12-device-initialize.md) | 初始化设备 |
|
||||
| [Shutdown](d3d12-device-shutdown.md) | 关闭设备并释放资源 |
|
||||
| [GetDevice](d3d12-device-get-device.md) | 获取底层 ID3D12Device 指针 |
|
||||
| [GetFactory](d3d12-device-get-factory.md) | 获取底层 IDXGIFactory4 指针 |
|
||||
| [GetAdapterInfo](d3d12-device-get-adapter-info.md) | 获取当前适配器信息 |
|
||||
| [EnumerateAdapters](d3d12-device-enumerate-adapters.md) | 枚举所有可用适配器 |
|
||||
| [GetDescriptorHandleIncrementSize](d3d12-device-get-descriptor-handle-increment-size.md) | 获取描述符增量大小 |
|
||||
| [CheckFeatureSupport](d3d12-device-check-feature-support.md) | 检查功能特性支持 |
|
||||
| [SetDeviceRemoved](d3d12-device-set-device-removed.md) | 标记设备已移除 |
|
||||
| [IsDeviceRemoved](d3d12-device-is-device-removed.md) | 检查设备是否已移除 |
|
||||
| [CreateBuffer](d3d12-device-create-buffer.md) | 创建缓冲区资源 |
|
||||
| [CreateTexture](d3d12-device-create-texture.md) | 创建纹理资源 |
|
||||
| [CreateSwapChain](d3d12-device-create-swap-chain.md) | 创建交换链 |
|
||||
| [CreateCommandList](d3d12-device-create-command-list.md) | 创建命令列表 |
|
||||
| [CreateCommandQueue](d3d12-device-create-command-queue.md) | 创建命令队列 |
|
||||
| [CompileShader](d3d12-device-compile-shader.md) | 编译着色器 |
|
||||
| [CreatePipelineState](d3d12-device-create-pipeline-state.md) | 创建管道状态对象 |
|
||||
| [CreateFence](d3d12-device-create-fence.md) | 创建围栏 |
|
||||
| [CreateSampler](d3d12-device-create-sampler.md) | 创建采样器 |
|
||||
| [GetCapabilities](d3d12-device-get-capabilities.md) | 获取设备能力 |
|
||||
| [GetDeviceInfo](d3d12-device-get-device-info.md) | 获取设备信息 |
|
||||
| [GetNativeDevice](d3d12-device-get-native-device.md) | 获取原生设备指针 |
|
||||
| [GetNativeHandle](d3d12-device-get-native-handle.md) | 获取原生句柄 |
|
||||
| [CreateCommandQueueImpl](d3d12-device-create-command-queue-impl.md) | 内部创建命令队列 |
|
||||
| [CreateCommandListImpl](d3d12-device-create-command-list-impl.md) | 内部创建命令列表 |
|
||||
| [CreateCommandAllocator](d3d12-device-create-command-allocator.md) | 内部创建命令分配器 |
|
||||
| [CreateDescriptorHeap](d3d12-device-create-descriptor-heap.md) | 内部创建描述符堆 |
|
||||
| [CreateQueryHeap](d3d12-device-create-query-heap.md) | 内部创建查询堆 |
|
||||
| [CreateRootSignature](d3d12-device-create-root-signature.md) | 内部创建根签名 |
|
||||
| [CreateRenderTargetView](d3d12-device-create-render-target-view.md) | 创建渲染目标视图 |
|
||||
| [CreateDepthStencilView](d3d12-device-create-depth-stencil-view.md) | 创建深度模板视图 |
|
||||
| [CreateShaderResourceView](d3d12-device-create-shader-resource-view.md) | 创建着色器资源视图 |
|
||||
| [CreateUnorderedAccessView](d3d12-device-create-unordered-access-view.md) | 创建无序访问视图 |
|
||||
| [CreateConstantBufferView](d3d12-device-create-constant-buffer-view.md) | 创建常量缓冲区视图 |
|
||||
|
||||
## 使用示例
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/RHI/D3D12/D3D12Device.h>
|
||||
|
||||
using namespace XCEngine::RHI;
|
||||
|
||||
// 创建设备实例
|
||||
D3D12Device device;
|
||||
|
||||
// 配置设备参数
|
||||
RHIDeviceDesc desc;
|
||||
desc.enableDebugLayer = true; // 启用调试层
|
||||
desc.enableGPUValidation = true; // 启用 GPU 验证
|
||||
desc.adapterIndex = 0; // 使用第一个适配器
|
||||
desc.windowHandle = hwnd; // 窗口句柄
|
||||
desc.width = 1280;
|
||||
desc.height = 720;
|
||||
desc.appName = L"XCEngine App";
|
||||
|
||||
// 初始化设备
|
||||
if (!device.Initialize(desc)) {
|
||||
// 处理初始化失败
|
||||
return false;
|
||||
}
|
||||
|
||||
// 获取设备信息
|
||||
const RHIDeviceInfo& info = device.GetDeviceInfo();
|
||||
printf("GPU: %ls\n", info.description.c_str());
|
||||
|
||||
// 获取设备能力
|
||||
const RHICapabilities& caps = device.GetCapabilities();
|
||||
printf("MaxTextureSize: %u\n", caps.maxTextureSize);
|
||||
|
||||
// 创建命令队列
|
||||
CommandQueueDesc queueDesc;
|
||||
queueDesc.queueType = static_cast<uint32_t>(CommandQueueType::Direct);
|
||||
queueDesc.priority = 0;
|
||||
queueDesc.nodeMask = 0;
|
||||
queueDesc.flags = 0;
|
||||
D3D12CommandQueue* commandQueue = device.CreateCommandQueueImpl(queueDesc);
|
||||
|
||||
// 创建缓冲区
|
||||
BufferDesc bufferDesc;
|
||||
bufferDesc.size = 1024 * 1024; // 1MB
|
||||
bufferDesc.stride = 0;
|
||||
bufferDesc.bufferType = static_cast<uint32_t>(BufferType::Vertex);
|
||||
bufferDesc.flags = 0;
|
||||
RHIBuffer* buffer = device.CreateBuffer(bufferDesc);
|
||||
|
||||
// 设备关闭
|
||||
device.Shutdown();
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [D3D12 模块概览](d3d12.md) - D3D12 模块总览
|
||||
- [RHIDevice](../rhi-device.md) - RHI 设备基类
|
||||
- [D3D12CommandQueue](d3d12-command-queue.md) - 命令队列
|
||||
- [D3D12Buffer](d3d12-buffer.md) - 缓冲区资源
|
||||
Reference in New Issue
Block a user