创建根签名布局。
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() 宏获取根签名布局接口的 REFIID 或 GUID。 例如,__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 |