Método IDMLCommandRecorder::RecordDispatch (directml.h)
Registra a execução de um objeto dispatchable (um inicializador de operador ou um operador compilado) em uma lista de comandos.
Esse método não envia a execução para a GPU; ele apenas o registra na lista de comandos. Você é responsável por fechar a lista de comandos e enviá-la para a fila de comandos do Direct3D 12.
Antes da execução dessa chamada na GPU, todos os recursos associados devem estar no estado D3D12_RESOURCE_STATE_UNORDERED_ACCESS ou um estado implicitamente promovível para D3D12_RESOURCE_STATE_UNORDERED_ACCESS, como D3D12_RESOURCE_STATE_COMMON. Depois que essa chamada for concluída, os recursos permanecerão no estado D3D12_RESOURCE_STATE_UNORDERED_ACCESS . A única exceção a isso é para carregar heaps associados ao executar um inicializador de operador e, enquanto um ou mais tensores têm o sinalizador DML_TENSOR_FLAG_OWNED_BY_DML definido. Nesse caso, todos os heaps de carregamento associados à entrada devem estar no estado D3D12_RESOURCE_STATE_GENERIC_READ e permanecerão nesse estado, conforme exigido por todos os heaps de upload.
Esse método redefine o estado a seguir na lista de comandos.
- Assinatura raiz de computação
- Estado do pipeline
Embora esse método use uma tabela de associação que representa os recursos a serem associados ao pipeline, ele não define os heaps do descritor que contêm os próprios descritores. Portanto, seu aplicativo é responsável por chamar ID3D12GraphicsCommandList::SetDescriptorHeaps para associar os heaps de descritor corretos ao pipeline.
Se DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE não tiver sido definido ao compilar o operador, todas as associações deverão ser definidas na tabela de associação antes que RecordDispatch seja chamado, caso contrário, o comportamento será indefinido. Caso contrário, se o sinalizador _DESCRIPTORS_VOLATILE estiver definido, a associação de recursos poderá ser adiada até que a lista de comandos do Direct3D 12 seja enviada para a fila de comandos para execução.
Esse método atua logicamente como uma chamada para ID3D12GraphicsCommandList::D ispatch. Dessa forma, barreiras de UAV (exibição de acesso não ordenada) são necessárias para garantir a ordenação correta se houver dependências de dados entre despachos. Esse método não insere barreiras UAV em recursos de entrada nem de saída. Seu aplicativo deve garantir que as barreiras UAV corretas sejam executadas em quaisquer entradas se o conteúdo depender de uma expedição de upstream e de quaisquer saídas se houver expedições downstream que dependam dessas saídas.
Esse método não contém referências a nenhuma das interfaces passadas. É sua responsabilidade garantir que o objeto IDMLDispatchable não seja liberado até que todas as expedições que o usam tenham concluído a execução na GPU.
Sintaxe
void RecordDispatch(
ID3D12CommandList *commandList,
IDMLDispatchable *dispatchable,
IDMLBindingTable *bindings
);
Parâmetros
commandList
Tipo: ID3D12CommandList*
Um ponteiro para uma interface ID3D12CommandList que representa a lista de comandos para registrar a execução. A lista de comandos deve estar aberta e deve ter o tipo D3D12_COMMAND_LIST_TYPE_DIRECT ou D3D12_COMMAND_LIST_TYPE_COMPUTE.
dispatchable
Tipo: IDMLDispatchable*
Um ponteiro para uma interface IDMLDispatchable que representa o objeto (um inicializador de operador ou um operador compilado) cuja execução será registrada na lista de comandos.
bindings
Tipo: IDMLBindingTable*
Um ponteiro para uma interface IDMLBindingTable que representa as associações a serem usadas para executar o objeto dispatchable. Se o sinalizador DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE não tiver sido definido, você deverá preencher todas as associações necessárias, caso contrário, um erro resultará.
Retornar valor
Nenhum
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | directml.h |
Biblioteca | DirectML.lib |
DLL | DirectML.dll |