Поделиться через


Метод 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.

Этот метод возвращает E_INVALIDARG , если большой двоичный объект, к которому указывает pBlobWithRootSignature , является недопустимым.

Замечания

Если приложение процедурно создает структуру данных D3D12_ROOT_SIGNATURE_DESC , она должна передать указатель на этот D3D12_ROOT_SIGNATURE_DESC в вызове D3D12SerializeRootSignature , чтобы сделать сериализованную форму. Затем приложение передает сериализованную форму в pBlobWithRootSignature в вызове ID3D12Device::CreateRootSignature.

Идентификатор REFIID или GUID интерфейса в макет корневой подписи можно получить с помощью макроса __uuidof(). Например, __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)));

Требования

Требование Ценность
целевая платформа Виндоус
Header d3d12.h
Library D3D12.lib
DLL D3D12.dll

См. также

ID3D12Device