Files
XCEngine/docs/api/rhi/d3d12/d3d12-root-signature.md

4.1 KiB

D3D12RootSignature

DirectX 12 根签名的 D3D12 实现,封装了 ID3D12RootSignature

头文件

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

命名空间

XCEngine::RHI (不继承 RHI 抽象接口)

公共成员函数

构造函数与析构函数

D3D12RootSignature()

默认构造函数。

~D3D12RootSignature()

析构函数,确保调用 Shutdown()

生命周期

bool Initialize(ID3D12Device* device, const D3D12_ROOT_SIGNATURE_DESC& desc)

初始化根签名。

  • device: D3D12 设备
  • desc: 根签名描述
  • 返回: 初始化是否成功

void Shutdown()

释放根签名。

原生接口

ID3D12RootSignature* GetRootSignature() const

获取底层 ID3D12RootSignature 指针。

void* GetNativeHandle() const

返回原生句柄。

uint32_t GetParameterCount() const

获取根参数数量。

静态辅助函数

static D3D12_ROOT_SIGNATURE_DESC CreateDesc(...)

创建根签名描述。

参数:

  • D3D12_ROOT_PARAMETER* parameters: 根参数数组
  • uint32_t parameterCount: 参数数量
  • D3D12_STATIC_SAMPLER_DESC* samplers: 静态采样器数组
  • uint32_t samplerCount: 静态采样器数量
  • D3D12_ROOT_SIGNATURE_FLAGS flags: 标志

static D3D12_ROOT_PARAMETER CreateCBV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0)

创建常量缓冲区视图根参数。

static D3D12_ROOT_PARAMETER CreateSRV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0)

创建着色器资源视图根参数。

static D3D12_ROOT_PARAMETER CreateUAV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0)

创建无序访问视图根参数。

static D3D12_ROOT_PARAMETER Create32BitConstants(uint32_t shaderRegister, uint32_t num32BitValues, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0)

创建 32 位常量根参数。

static D3D12_ROOT_PARAMETER CreateDescriptorTable(uint32_t numRanges, const D3D12_DESCRIPTOR_RANGE* ranges, ShaderVisibility visibility = ShaderVisibility::All)

创建描述符表根参数。

static D3D12_STATIC_SAMPLER_DESC CreateStaticSampler(...)

创建静态采样器描述。

static D3D12_SAMPLER_DESC CreateSamplerDesc(FilterMode filter, TextureAddressMode address, float maxLOD = D3D12_FLOAT32_MAX)

创建采样器描述。

static D3D12_DESCRIPTOR_RANGE CreateDescriptorRange(...)

创建描述符范围。

参数:

  • type: 描述符类型 (CBV, SRV, UAV, Sampler)
  • baseShaderRegister: 基寄存器编号
  • numDescriptors: 描述符数量
  • registerSpace: 寄存器空间

内部成员

成员 类型 描述
m_rootSignature ComPtr<ID3D12RootSignature> D3D12 根签名
m_parameterCount uint32_t 参数数量

使用示例

// Create root parameters
D3D12_ROOT_PARAMETER params[3];

// Parameter 0: CBV
params[0] = D3D12RootSignature::CreateCBV(0);

// Parameter 1: 32-bit constants (e.g., 4x4 matrix = 16 floats)
params[1] = D3D12RootSignature::Create32BitConstants(0, 16);

// Parameter 2: Descriptor table
D3D12_DESCRIPTOR_RANGE ranges[1];
ranges[0] = D3D12RootSignature::CreateDescriptorRange(
    D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 10);
params[2] = D3D12RootSignature::CreateDescriptorTable(1, ranges);

// Create static samplers
D3D12_SAMPLER_DESC sampDesc = D3D12RootSignature::CreateSamplerDesc(
    FilterMode::Linear, TextureAddressMode::Wrap);
D3D12_STATIC_SAMPLER_DESC staticSamp = D3D12RootSignature::CreateStaticSampler(0, sampDesc);

// Create root signature
D3D12_ROOT_SIGNATURE_DESC rsDesc = D3D12RootSignature::CreateDesc(
    params, 3, &staticSamp, 1);
D3D12RootSignature rootSig;
rootSig.Initialize(device->GetDevice(), rsDesc);

备注

  • 根签名定义 GPU 能访问的资源布局
  • 根参数有三种类型: 描述符表、常量、描述符
  • 描述符表使用描述符范围引用描述符堆中的描述符
  • 静态采样器嵌入根签名,无需描述符堆
  • 根签名需要与 PSO 匹配