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


Метод 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 установите значение 0. Если имеется несколько узлов 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)));

Требования

Требование Значение
Целевая платформа Windows
Header d3d12.h
Библиотека D3D12.lib
DLL D3D12.dll

См. также раздел

ID3D12Device