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 () 宏获取根签名布局接口的 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)));
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | d3d12.h |
Library | D3D12.lib |
DLL | D3D12.dll |