ID3D12Device::CreateRootSignature 方法 (d3d12.h)

创建根签名布局。

Syntax

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

要求

Requirement 价值
目标平台 Windows操作系统
Header d3d12.h
Library D3D12.lib
DLL D3D12.dll

另请参阅

ID3D12Device