Partager via


IDMLDevice::CreateBindingTable, méthode (directml.h)

Crée une table de liaison, qui est un objet qui peut être utilisé pour lier des ressources (telles que des tenseurs) au pipeline.

La table de liaison encapsule une plage d’un tas de descripteur géré par l’application à l’aide des handles et du nombre de descripteurs fournis. Les tables de liaison sont utilisées par DirectML pour gérer la liaison des ressources en écrivant des descripteurs dans le tas de descripteur au décalage spécifié par le CPUDescriptorHandle et en liant ces descripteurs au pipeline à l’aide des descripteurs au décalage spécifié par le GPUDescriptorHandle. L’ordre dans lequel DirectML écrit des descripteurs dans le tas n’étant pas spécifié, votre application doit veiller à ne pas remplacer les descripteurs encapsulés par la table de liaison.

Les handles de descripteur processeur et GPU fournis peuvent provenir de différents tas, mais il incombe ensuite à votre application de s’assurer que l’ensemble de la plage de descripteurs auquel fait référence le descripteur d’UC est copiée dans la plage à laquelle fait référence le handle de descripteur GPU avant l’exécution à l’aide de cette table de liaison.

Le tas de descripteur à partir duquel les handles sont fournis doit avoir le type D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV. En outre, le tas auquel fait référence le GPUDescriptorHandle doit être un tas de descripteur visible par le nuanceur.

Vous ne devez pas supprimer le tas auquel fait référence le handle de descripteur GPU tant que tout le travail référençant celui-ci n’a pas terminé l’exécution sur le GPU. Toutefois, vous pouvez réinitialiser ou libérer la table de liaison elle-même dès que la répartition a été enregistrée dans la liste de commandes. Comme pour la relation entre ID3D12CommandList et ID3D12CommandAllocator, IDMLBindingTable ne possède pas la mémoire sous-jacente référencée par les handles de descripteur. Au lieu de cela, l’ID3D12DescriptorHeap fait. Par conséquent, vous êtes autorisé à réinitialiser ou à libérer une table de liaison DirectML avant que le travail à l’aide de la table de liaison ait terminé l’exécution sur le GPU.

Syntaxe

HRESULT CreateBindingTable(
  [in, optional] const DML_BINDING_TABLE_DESC *desc,
                 REFIID                       riid,
  [out]          void                         **ppv
);

Paramètres

[in, optional] desc

Type : const DML_BINDING_TABLE_DESC*

Pointeur facultatif vers un DML_BINDING_TABLE_DESC contenant les paramètres de la table de liaison. Il peut s’agir de nullptr, indiquant une table de liaison vide.

riid

Type : REFIID

Référence à l’identificateur global unique (GUID) de l’interface que vous souhaitez retourner dans ppv. Il s’agit du GUID d’IDMLBindingTable.

[out] ppv

Type : void**

Pointeur vers un bloc de mémoire qui reçoit un pointeur vers la table de liaison. Il s’agit de l’adresse d’un pointeur vers un IDMLBindingTable, représentant la table de liaison créée.

Valeur retournée

Type : HRESULT

Si cette méthode réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Spécifications

   
Plateforme cible Windows
En-tête directml.h
Bibliothèque DirectML.lib
DLL DirectML.dll

Voir aussi

Liaison dans DirectML

IDMLDevice