5.0 KiB
5.0 KiB
D3D12Device
DirectX 12 设备的 D3D12 实现,是引擎的 RHI 抽象层 RHIDevice 接口的具体实现。
头文件
#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: 供应商和设备 IDisSoftware: 是否为软件适配器
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)
创建 D3D12 缓冲区。
RHITexture* CreateTexture(const TextureDesc& desc)
创建 D3D12 纹理。
RHISwapChain* CreateSwapChain(const SwapChainDesc& desc)
创建 D3D12 交换链。
RHICommandList* CreateCommandList(const CommandListDesc& desc)
创建 D3D12 命令列表。
RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc)
创建 D3D12 命令队列。
RHIShader* CompileShader(const ShaderCompileDesc& desc)
编译着色器。
RHIPipelineState* CreatePipelineState(const PipelineStateDesc& desc)
创建管线状态对象。
RHIFence* CreateFence(const FenceDesc& desc)
创建栅栏同步对象。
RHISampler* CreateSampler(const SamplerDesc& desc)
创建采样器。
内部实现创建
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)
创建常量缓冲区视图。
使用示例
#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()可以模拟设备移除场景用于测试