Método IDMLCommandRecorder::RecordDispatch (directml.h)
Registra la ejecución de un objeto distribuidor (un inicializador de operador o un operador compilado) en una lista de comandos.
Este método no envía la ejecución a la GPU; simplemente lo registra en la lista de comandos. Usted es responsable de cerrar la lista de comandos y enviarlo a la cola de comandos de Direct3D 12.
Antes de la ejecución de esta llamada en la GPU, todos los recursos enlazados deben estar en estado D3D12_RESOURCE_STATE_UNORDERED_ACCESS o un estado promocionable implícitamente para D3D12_RESOURCE_STATE_UNORDERED_ACCESS, como D3D12_RESOURCE_STATE_COMMON. Una vez completada esta llamada, los recursos permanecen en estado D3D12_RESOURCE_STATE_UNORDERED_ACCESS . La única excepción a esto es para cargar montones enlazados al ejecutar un inicializador de operador y mientras que uno o varios tensores tienen establecida la marca de DML_TENSOR_FLAG_OWNED_BY_DML . En ese caso, los montones de carga enlazados a la entrada deben estar en el estado D3D12_RESOURCE_STATE_GENERIC_READ y permanecerán en ese estado, según sea necesario para todos los montones de carga.
Este método restablece el estado siguiente en la lista de comandos.
- Firma raíz de proceso
- Estado de canalización
Aunque este método toma una tabla de enlace que representa los recursos que se van a enlazar a la canalización, no establece los montones de descriptores que contienen los propios descriptores. Por lo tanto, la aplicación es responsable de llamar a ID3D12GraphicsCommandList::SetDescriptorHeaps para enlazar los montones de descriptor correctos a la canalización.
Si no se estableció DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE al compilar el operador, todos los enlaces deben establecerse en la tabla de enlace antes de llamar a RecordDispatch ; de lo contrario, el comportamiento no está definido. De lo contrario, si se establece la marca de _DESCRIPTORS_VOLATILE , el enlace de recursos se puede aplazar hasta que la lista de comandos de Direct3D 12 se envíe a la cola de comandos para su ejecución.
Este método actúa lógicamente como una llamada a ID3D12GraphicsCommandList::D ispatch. Por lo tanto, las barreras de la vista de acceso desordenado (UAV) son necesarias para garantizar la ordenación correcta si hay dependencias de datos entre envíos. Este método no inserta barreras UAV en los recursos de entrada ni salida. La aplicación debe asegurarse de que las barreras de UAV correctas se realizan en las entradas si su contenido depende de un envío ascendente y de las salidas si hay envíos descendentes que dependen de esas salidas.
Este método no contiene referencias a ninguna de las interfaces pasadas. Es su responsabilidad asegurarse de que el objeto IDMLDispatchable no se libere hasta que todos los envíos que lo usen hayan completado la ejecución en la GPU.
Sintaxis
void RecordDispatch(
ID3D12CommandList *commandList,
IDMLDispatchable *dispatchable,
IDMLBindingTable *bindings
);
Parámetros
commandList
Tipo: ID3D12CommandList*
Puntero a una interfaz ID3D12CommandList que representa la lista de comandos en la que se va a registrar la ejecución. La lista de comandos debe estar abierta y debe tener el tipo D3D12_COMMAND_LIST_TYPE_DIRECT o D3D12_COMMAND_LIST_TYPE_COMPUTE.
dispatchable
Tipo: IDMLDispatchable*
Puntero a una interfaz IDMLDispatchable que representa el objeto (un inicializador de operador o un operador compilado) cuya ejecución se registrará en la lista de comandos.
bindings
Tipo: IDMLBindingTable*
Puntero a una interfaz IDMLBindingTable que representa los enlaces que se van a usar para ejecutar el objeto distribuidor. Si no se estableció la marca DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE , debe rellenar todos los enlaces necesarios; de lo contrario, se producirá un error.
Valor devuelto
None
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | directml.h |
Library | DirectML.lib |
Archivo DLL | DirectML.dll |