ID3D12Device::CreateRootSignature 方法 (d3d12.h)

创建根签名布局。

语法

HRESULT CreateRootSignature(
  [in]  UINT       nodeMask,
  [in]  const void *pBlobWithRootSignature,
  [in]  SIZE_T     blobLengthInBytes,
        REFIID     riid,
  [out] void       **ppvRootSignature
);

参数

[in] nodeMask

类型: UINT

对于单个 GPU 操作,请将此项设置为零。 如果有多个 GPU 节点,请设置位来标识 (根签名要应用到的设备物理适配器) 节点。 掩码中的每个位都对应一个节点。 请参阅 多适配器系统

[in] pBlobWithRootSignature

类型: const void*

指向序列化签名的源数据的指针。

[in] blobLengthInBytes

类型: SIZE_T

pBlobWithRootSignature 指向的内存块的大小(以字节为单位)。

riid

类型: REFIID

根签名接口的全局唯一标识符 (GUID) 。 请参阅“备注”。 一个输入参数。

[out] ppvRootSignature

类型: void**

指向内存块的指针,该内存块接收指向根签名的指针。

返回值

类型: HRESULT

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

如果 pBlobWithRootSignature 指向的 blob 无效,此方法将返回E_INVALIDARG

注解

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

可以使用 __uuidof () 宏获取根签名布局接口的 REFIIDGUID。 例如,__uuidof (ID3D12RootSignature) 将获取根签名接口的 GUID

示例

D3D12HelloTriangle 示例使用 ID3D12Device::CreateRootSignature,如下所示:

创建空的根签名。

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)));

要求

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

另请参阅

ID3D12Device