Metodo IDMLCommandRecorder::RecordDispatch (directml.h)

Registra l'esecuzione di un oggetto dispatchable (inizializzatore operatore o un operatore compilato) in un elenco di comandi.

Questo metodo non invia l'esecuzione alla GPU; registra semplicemente l'oggetto nell'elenco dei comandi. È responsabile della chiusura dell'elenco dei comandi e dell'invio alla coda dei comandi Direct3D 12.

Prima dell'esecuzione di questa chiamata sulla GPU, tutte le risorse associate devono trovarsi nello stato D3D12_RESOURCE_STATE_UNORDERED_ACCESS o uno stato implicitamente promozionale per D3D12_RESOURCE_STATE_UNORDERED_ACCESS, ad esempio D3D12_RESOURCE_STATE_COMMON. Al termine della chiamata, le risorse rimangono nello stato di D3D12_RESOURCE_STATE_UNORDERED_ACCESS . L'unica eccezione a questa è per l'heaps di caricamento associata durante l'esecuzione di un inizializzatore dell'operatore e mentre uno o più tensori ha il flag di DML_TENSOR_FLAG_OWNED_BY_DML impostato. In tal caso, qualsiasi heaps di caricamento associato per l'input deve trovarsi nello stato di D3D12_RESOURCE_STATE_GENERIC_READ e rimarrà in tale stato, come richiesto da tutti gli heaps di caricamento.

Questo metodo reimposta lo stato seguente nell'elenco dei comandi.

  • Firma radice di calcolo
  • Stato della pipeline
Non viene modificato alcun altro stato dell'elenco di comandi.

Anche se questo metodo accetta una tabella di associazione che rappresenta le risorse da associare alla pipeline, non imposta l'heaps descrittore contenente i descrittori stessi. Pertanto, l'applicazione è responsabile della chiamata di ID3D12GraphicsCommandList::SetDescriptorHeaps per associare l'heaps descrittore corretto alla pipeline.

Se DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE non è stato impostato durante la compilazione dell'operatore, tutti i binding devono essere impostati nella tabella di associazione prima che Venga chiamato RecordDispatch , altrimenti il comportamento non è definito. In caso contrario, se il flag _DESCRIPTORS_VOLATILE è impostato, l'associazione di risorse può essere posticipata fino a quando l'elenco di comandi Direct3D 12 non viene inviato alla coda dei comandi per l'esecuzione.

Questo metodo agisce logicamente come una chiamata a ID3D12GraphicsCommandList::D ispatch. Di conseguenza, le barriere di accesso non ordinate (UAV) sono necessarie per garantire l'ordinamento corretto se sono presenti dipendenze dati tra gli invii. Questo metodo non inserisce barriere UAV per l'input o le risorse di output. L'applicazione deve assicurarsi che le barriere UAV corrette vengano eseguite su qualsiasi input se il loro contenuto dipende da un invio upstream e da eventuali output se sono presenti dispatch downstream che dipendono da tali output.

Questo metodo non contiene riferimenti a nessuna delle interfacce passate. È responsabilità dell'utente assicurarsi che l'oggetto IDMLDispatchable non venga rilasciato fino a quando tutte le spedizioni che usano non sono state completate l'esecuzione nella GPU.

Sintassi

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

Parametri

commandList

Tipo: ID3D12CommandList*

Puntatore a un'interfaccia ID3D12CommandList che rappresenta l'elenco di comandi in cui registrare l'esecuzione. L'elenco di comandi deve essere aperto e deve avere il tipo D3D12_COMMAND_LIST_TYPE_DIRECT o D3D12_COMMAND_LIST_TYPE_COMPUTE.

dispatchable

Tipo: IDMLDispatchable*

Puntatore a un'interfaccia IDMLDispatchable che rappresenta l'oggetto (un inizializzatore operatore o un operatore compilato) il cui esecuzione verrà registrata nell'elenco di comandi.

bindings

Tipo: IDMLBindingTable*

Puntatore a un'interfaccia IDMLBindingTable che rappresenta le associazioni da usare per l'esecuzione dell'oggetto dispatchable. Se il flag di DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE non è stato impostato, è necessario compilare tutte le associazioni necessarie, altrimenti verrà generato un errore.

Valore restituito

nessuno

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione directml.h
Libreria DirectML.lib
DLL DirectML.dll

Vedi anche

Binding in DirectML

IDMLCommandRecorder