# D3D12Device DirectX 12 设备的 D3D12 实现,是引擎的 RHI 抽象层 `RHIDevice` 接口的具体实现。 ## 头文件 ```cpp #include ``` ## 类概览 `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 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 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()` 可以模拟设备移除场景用于测试