IDMLCommandRecorder::RecordDispatch メソッド (directml.h)

ディスパッチ可能なオブジェクト (演算子初期化子、またはコンパイルされた演算子) の実行をコマンド リストに記録します。

このメソッドは、GPU に実行を送信しません。コマンド リストに記録するだけです。 コマンド リストを閉じて、Direct3D 12コマンド キューに送信する必要があります。

GPU でこの呼び出しを実行する前に、バインドされているすべてのリソースがD3D12_RESOURCE_STATE_UNORDERED_ACCESS状態であるか、D3D12_RESOURCE_STATE_COMMONなどのD3D12_RESOURCE_STATE_UNORDERED_ACCESSに暗黙的に昇格可能な状態である必要があります。 この呼び出しが完了した後、リソースは D3D12_RESOURCE_STATE_UNORDERED_ACCESS 状態のままになります。 これに対する唯一の例外は、演算子初期化子を実行するとき、および 1 つ以上のテンソルに DML_TENSOR_FLAG_OWNED_BY_DML フラグが設定されているときにバインドされるアップロード ヒープです。 その場合、入力用にバインドされたすべてのアップロード ヒープは D3D12_RESOURCE_STATE_GENERIC_READ 状態でなければならず、すべてのアップロード ヒープで求められるように、その状態のままになります。

このメソッドは、コマンド 一覧で次の状態をリセットします。

  • コンピューティング ルート署名
  • パイプライン ステート
他のコマンド リストの状態は変更されません。

このメソッドは、パイプラインにバインドするリソースを表すバインド テーブルを受け取りますが、記述子自体を含む記述子ヒープは設定しません。 そのため、アプリケーションは ID3D12GraphicsCommandList::SetDescriptorHeaps を呼び出して、正しい記述子ヒープをパイプラインにバインドします。

演算子のコンパイル時に DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE が設定されなかった場合は、RecordDispatch が呼び出される前にすべてのバインドをバインド テーブルに設定する必要があります。そうしなければ、動作は未定義になります。 それ以外の場合、_DESCRIPTORS_VOLATILE フラグが設定されている場合、Direct3D 12コマンド リストが実行のためにコマンド キューに送信されるまで、リソースのバインドが遅延される可能性があります。

このメソッドは、 ID3D12GraphicsCommandList::D ispatch の呼び出しのように論理的に機能します。 そのため、ディスパッチ間にデータの依存関係がある場合は、確実に正しい順序にするために順序指定されていないアクセス ビュー (UAV) バリアが必要になります。 このメソッドでは、入力リソースにも出力リソースにも UAV バリアが挿入されません。 アプリケーションでは、適切な UAV バリアが、入力 (その内容がアップストリームのディスパッチに依存する場合) および出力 (出力に依存するダウンストリームのディスパッチがある場合) に対して実行されるようにする必要があります。

このメソッドは、渡されたインターフェイスへの参照を保持しません。 IDMLDispatchable オブジェクトを使用するすべてのディスパッチが GPU での実行を完了するまで解放されないようにするのは、ユーザーの責任です。

構文

void RecordDispatch(
  ID3D12CommandList *commandList,
  IDMLDispatchable  *dispatchable,
  IDMLBindingTable  *bindings
);

パラメーター

commandList

種類: ID3D12CommandList*

実行を記録するコマンド リストを表す ID3D12CommandList インターフェイスへのポインター。 コマンド リストは開いている必要があり、型 D3D12_COMMAND_LIST_TYPE_DIRECT または D3D12_COMMAND_LIST_TYPE_COMPUTEが必要です。

dispatchable

種類: IDMLDispatchable*

実行がコマンド リストに記録されるオブジェクト (演算子初期化子、またはコンパイルされた演算子) を表す IDMLDispatchable インターフェイスへのポインター。

bindings

型: IDMLBindingTable*

ディスパッチ可能なオブジェクトの実行に使用するバインドを表す IDMLBindingTable インターフェイスへのポインター。 DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE フラグが設定されていない場合は、必要なすべてのバインドに入力する必要があります。そうしないと、エラーが発生します。

戻り値

なし

必要条件

要件
対象プラットフォーム Windows
ヘッダー directml.h
Library DirectML.lib
[DLL] DirectML.dll

こちらもご覧ください

DirectML でのバインド

IDMLCommandRecorder