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
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 |