> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# D3D12SerializeRootSignature

> 序列化可传递给 ID3D12Device::CreateRootSignature 的 1.0 版根签名。

序列化可传递给 [ID3D12Device::CreateRootSignature](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createrootsignature_public) 的 1.0 版根签名。

## 语法

```cpp theme={null}
HRESULT D3D12SerializeRootSignature(
    const D3D12_ROOT_SIGNATURE_DESC  pRootSignature,
    D3D_ROOT_SIGNATURE_VERSION Version,
    ID3DBlob  ppBlob,
    ID3DBlob  ppErrorBlob
)
```

### 参数

*pRootSignature \[in]*\
类型：const D3D12\_ROOT\_SIGNATURE\_DESC \*

根签名的描述，作为指向 [D3D12\_ROOT\_SIGNATURE\_DESC](/reference/graphics/d3d12/structs/d3d12_root_signature_desc_public) 结构的指针。

*Version \[in]*\
类型：D3D\_ROOT\_SIGNATURE\_VERSION

[D3D\_ROOT\_SIGNATURE\_VERSION](/reference/graphics/d3d12/enums/d3d_root_signature_version_public) 类型的值，用于指定根签名版本。

*ppBlob \[out]*\
类型：ID3DBlob \*\*

指向内存块的指针，用于接收指向 **ID3DBlob** 接口的指针，您可以使用该接口访问序列化的根签名。

*ppErrorBlob \[out, optional]*\
类型：ID3DBlob \*\*

指向内存块的指针，用于接收指向 **ID3DBlob** 接口的指针，您可以使用该接口访问序列化程序的错误消息；如果没有错误，则为 **NULL**。

### 返回值

类型：HRESULT

如果成功则返回 **S\_OK**；否则返回 [Direct3D 12 返回代码](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/d3d12-graphics-reference-returnvalues)之一。

## 备注

自 Windows 10 周年更新 (14393) 起，此函数已被 [D3D12SerializeVersionedRootSignature](/reference/graphics/d3d12/functions/d3d12serializeversionedrootsignature_public) 取代。

如果应用程序以程序化方式生成 [D3D12\_ROOT\_SIGNATURE\_DESC](/reference/graphics/d3d12/structs/d3d12_root_signature_desc_public) 数据结构，则必须在调用 **D3D12SerializeRootSignature** 时传入指向此 **D3D12\_ROOT\_SIGNATURE\_DESC** 的指针，以生成序列化形式。
然后，应用程序将 <i>ppBlob</i> 所指向的序列化形式传递给 [ID3D12Device::CreateRootSignature](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createrootsignature_public)。

如果着色器在编写时已包含根签名，则编译后的着色器中将已经包含序列化的根签名。在这种情况下，将编译后的着色器 blob 传递给 [ID3D12Device::CreateRootSignature](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createrootsignature_public) 以获取运行时根签名对象。

函数签名 PFN\_D3D12\_SERIALIZE\_ROOT\_SIGNATURE 以 typedef 形式提供，以便您使用动态链接技术（[GetProcAddress](https://learn.microsoft.com/en-us/windows/desktop/api/libloaderapi/nf-libloaderapi-getprocaddress)），而无需静态链接。

#### 示例

创建一个空的根签名。

```cpp theme={null}
CD3DX12_ROOT_SIGNATURE_DESC rootSignatureDesc;
rootSignatureDesc.Init(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT);

ComPtr<ID3DBlob> signature;
ComPtr<ID3DBlob> error;
ThrowIfFailed(D3D12SerializeRootSignature(&rootSignatureDesc, D3D_ROOT_SIGNATURE_VERSION_1, &signature, &error));
ThrowIfFailed(m_device->CreateRootSignature(0, signature->GetBufferPointer(), signature->GetBufferSize(), IID_PPV_ARGS(&m_rootSignature)));

```

请参阅 [D3D12 参考中的示例代码](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/notes-on-example-code)。

<div class="code" />

## 要求

**头文件：** d3d12\_xs.h 或 d3d12\_x.h\
**库：** d3d12\_xs.lib 或 d3d12\_x.lib\
**支持的平台**：XBOX Series 主机和 XBOX One 系列

## 另请参阅

[核心函数](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/direct3d-12-functions)

[创建根签名](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/creating-a-root-signature)


## Related topics

- [D3D_ROOT_SIGNATURE_VERSION](/zh-CN/reference/graphics/d3d12/enums/d3d_root_signature_version_public.md)
- [D3D12_ROOT_SIGNATURE_DESC](/zh-CN/reference/graphics/d3d12/structs/d3d12_root_signature_desc_public.md)
- [CreateRootSignature](/zh-CN/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createrootsignature_public.md)
- [D3D12_VERSIONED_ROOT_SIGNATURE_DESC](/zh-CN/reference/graphics/d3d12/structs/d3d12_versioned_root_signature_desc_public.md)
- [ID3D12RootSignature](/zh-CN/reference/graphics/d3d12/interfaces/id3d12rootsignature/id3d12rootsignature_public.md)
