IDMLDevice::CreateBindingTable 方法 (directml.h)

创建绑定表,该表是一个对象,可用于将资源 ((如张量) )绑定到管道。

绑定表使用提供的描述符句柄和计数包装应用程序管理的描述符堆的范围。 DirectML 使用绑定表来管理资源的绑定,方法是在 CPUDescriptorHandle 指定的偏移量处将描述符写入描述符堆,并在 GPUDescriptorHandle 指定的偏移处使用这些描述符将这些描述符绑定到管道。 DirectML 在堆中写入描述符的顺序未指定,因此,应用程序必须注意不要覆盖绑定表所包装的描述符。

提供的 CPU 和 GPU 描述符句柄可能来自不同的堆,但是,在使用此绑定表执行之前,应用程序需负责确保将 CPU 描述符句柄引用的整个描述符范围复制到 GPU 描述符句柄引用的范围。

从中提供句柄的描述符堆的类型必须是 D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV。 此外, GPUDescriptorHandle 引用的堆必须是着色器可见的描述符堆。

在引用它的所有工作在 GPU 上完成执行之前,不得删除 GPU 描述符句柄所引用的堆。 但是,一旦调度记录到命令列表中,就可以重置或释放绑定表本身。 与 ID3D12CommandListID3D12CommandAllocator 之间的关系类似, IDMLBindingTable 不拥有描述符句柄引用的基础内存。 相反, ID3D12DescriptorHeap 会这样做。 因此,在使用绑定表的工作在 GPU 上完成执行之前,可以重置或释放 DirectML 绑定表。

语法

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

对要在 ppv 中返回的接口 (GUID) 的全局唯一标识符的引用。 这应为 IDMLBindingTable 的 GUID。

[out] ppv

类型: void**

指向内存块的指针,该内存块接收指向绑定表的指针。 这是指向 IDMLBindingTable 的指针的地址,表示创建的绑定表。

返回值

类型: HRESULT

如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

要求

   
目标平台 Windows
标头 directml.h
Library DirectML.lib
DLL DirectML.dll

请参阅

DirectML 中的绑定

IDMLDevice