IDMLDevice::CreateBindingTable メソッド (directml.h)
バインド テーブルを作成します。これは、リソース (テンソルなど) をパイプラインにバインドするために使用できるオブジェクトです。
バインド テーブルは、指定された記述子ハンドルと数を使用して、アプリケーションマネージド記述子ヒープの範囲をラップします。 バインド テーブルは、CPUDescriptorHandle で指定されたオフセットの記述子ヒープに記述子を書き込み、GPUDescriptorHandle で指定されたオフセットにある記述子を使用してパイプラインにバインドすることで、リソースのバインドを管理するために DirectML によって使用されます。 DirectML が記述子をヒープに書き込む順序は指定されていません。そのため、アプリケーションは、バインド テーブルでラップされた記述子を上書きしないように注意する必要があります。
指定された CPU および GPU 記述子ハンドルは異なるヒープのものである可能性があります。ただし、このバインド テーブルを使用した実行の前に、CPU 記述子ハンドルによって参照される記述子範囲全体が GPU 記述子ハンドルによって参照される範囲にコピーされることを保証するのはアプリケーションの責任です。
ハンドルの指定元である記述子ヒープは、D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV 型である必要があります。 さらに、 GPUDescriptorHandle によって参照されるヒープは、シェーダーに表示される記述子ヒープである必要があります。
GPU 記述子ハンドルによって参照されるヒープは、それを参照するすべての作業が GPU での実行を完了するまで削除しないでください。 ただし、ディスパッチがコマンド リストに記録されるとすぐに、バインド テーブル自体をリセットまたは解放できます。 ID3D12CommandList と ID3D12CommandAllocator の関係と同様に、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 |