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

5.0 KiB
Raw Blame History

D3D12Device

DirectX 12 设备的 D3D12 实现,是引擎的 RHI 抽象层 RHIDevice 接口的具体实现。

头文件

#include <XCEngine/RHI/D3D12/D3D12Device.h>

类概览

D3D12Device 封装了 DirectX 12 的 ID3D12DeviceIDXGIFactory4,负责创建和管理所有 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)

创建 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() 可以模拟设备移除场景用于测试