D3D12SerializeRootSignature 函数 (d3d12.h)

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

语法

HRESULT D3D12SerializeRootSignature(
  [in]            const D3D12_ROOT_SIGNATURE_DESC *pRootSignature,
  [in]            D3D_ROOT_SIGNATURE_VERSION      Version,
  [out]           ID3DBlob                        **ppBlob,
  [out, optional] ID3DBlob                        **ppErrorBlob
);

参数

[in] pRootSignature

类型: const D3D12_ROOT_SIGNATURE_DESC*

根签名的说明,作为指向 D3D12_ROOT_SIGNATURE_DESC 结构的指针。

[in] Version

类型: D3D_ROOT_SIGNATURE_VERSION

一个D3D_ROOT_SIGNATURE_VERSION类型的值,该值指定根签名的版本。

[out] ppBlob

类型: ID3DBlob**

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

[out, optional] ppErrorBlob

类型: ID3DBlob**

指向内存块的指针,该内存块接收指向可用于访问序列化程序错误消息的 ID3DBlob 接口的指针;如果没有错误,则为 NULL

返回值

类型: HRESULT

如果成功,则返回 S_OK ;否则,返回 Direct3D 12 返回代码之一。

备注

自 Windows 10 周年更新 (14393) 起,此函数已被 D3D12SerializeVersionedRootSignature 取代。

如果应用程序以过程方式生成D3D12_ROOT_SIGNATURE_DESC数据结构,则必须在调用 D3D12SerializeRootSignature 中传递指向此D3D12_ROOT_SIGNATURE_DESC的指针,以生成序列化表单。 然后,应用程序将 ppBlob 指向的序列化表单传递到 ID3D12Device::CreateRootSignature 中。

如果编写的着色器包含根签名,则编译的着色器已包含序列化的根签名。 在这种情况下,将编译的着色器 blob 传递给 ID3D12Device::CreateRootSignature 以获取运行时根签名对象。

函数签名PFN_D3D12_SERIALIZE_ROOT_SIGNATURE作为 typedef 提供,因此可以使用动态链接技术 (GetProcAddress) 而不是静态链接。

示例

创建空的根签名。

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 参考中的示例代码

要求

   
目标平台 Windows
标头 d3d12.h
Library D3D12.lib
DLL D3D12.dll

另请参阅

核心函数

创建根签名