Метод IDMLDevice::CreateBindingTable (directml.h)
Создает таблицу привязки, которая является объектом, который можно использовать для привязки ресурсов (например, тензоров) к конвейеру.
Таблица привязки заключает в оболочку диапазон кучи дескриптора, управляемой приложением, используя предоставленные дескрипторы дескриптора и счетчик. Таблицы привязки используются DirectML для управления привязкой ресурсов путем записи дескрипторов в кучу дескрипторов со смещением, указанным в cpuDescriptorHandle, и привязки этих дескрипторов к конвейеру с помощью дескрипторов со смещением, указанным в GPUDescriptorHandle. Порядок, в котором DirectML записывает дескрипторы в кучу, не определен, поэтому приложение должно следить за тем, чтобы не перезаписать дескрипторы, заключенные в таблицу привязки.
Предоставленные дескрипторы дескриптора ЦП и GPU могут поступать из разных куч, однако в этом случае ваше приложение отвечает за то, чтобы весь диапазон дескриптора дескриптора дескриптора ЦП копировался в диапазон, на который ссылается дескриптор GPU перед выполнением с помощью этой таблицы привязки.
Куча дескрипторов, из которой предоставляются дескрипторы, должна иметь тип D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV. Кроме того, куча, на которую ссылается GPUDescriptorHandle , должна быть видимой для шейдера кучей дескрипторов.
Не следует удалять кучу, на которую ссылается дескриптор GPU, пока все работы, ссылающиеся на нее, не будут завершены в GPU. Однако можно сбросить или освободить саму таблицу привязки сразу после записи отправки в список команд. Как и между ID3D12CommandList и ID3D12CommandAllocator, IDMLBindingTable не владеет базовой памятью, на которую ссылаются дескрипторы дескриптора. Скорее, id3D12DescriptorHeap делает. Таким образом, вы можете сбросить или освободить таблицу привязки DirectML до завершения работы с таблицей привязки в GPU.
Синтаксис
HRESULT CreateBindingTable(
[in, optional] const DML_BINDING_TABLE_DESC *desc,
REFIID riid,
[out] void **ppv
);
Параметры
[in, optional] desc
Тип: const DML_BINDING_TABLE_DESC*
Необязательный указатель на DML_BINDING_TABLE_DESC , содержащий параметры таблицы привязки. Это может быть значение nullptr, указывающее на пустую таблицу привязки.
riid
Тип: REFIID
Ссылка на глобальный уникальный идентификатор (GUID) интерфейса, который вы хотите вернуть в ppv. Ожидается, что это будет GUID IDMLBindingTable.
[out] ppv
Тип: void**
Указатель на блок памяти, который получает указатель на таблицу привязки. Это адрес указателя на IDMLBindingTable, представляющий созданную таблицу привязки.
Возвращаемое значение
Тип: HRESULT
Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .
Требования
Целевая платформа | Windows |
Header | directml.h |
Библиотека | DirectML.lib |
DLL | DirectML.dll |