Método ID3D12CommandQueue::ExecuteCommandLists (d3d12.h)
Envia uma matriz de listas de comandos para execução.
Sintaxe
void ExecuteCommandLists(
[in] UINT NumCommandLists,
[in] ID3D12CommandList * const *ppCommandLists
);
Parâmetros
[in] NumCommandLists
O número de listas de comandos a serem executadas.
[in] ppCommandLists
A matriz de comandos ID3D12CommandList a ser executada.
Valor retornado
Nenhum
Comentários
Chamar ExecuteCommandLists duas vezes seguidas (do mesmo thread ou threads diferentes) garante que a primeira carga de trabalho (A) seja concluída antes da segunda carga de trabalho (B). Chamar ExecuteCommandLists com duas listas de comandos permite que o driver mescle as duas listas de comandos de modo que a segunda lista de comandos (D) possa começar a executar o trabalho antes que todo o trabalho do primeiro (C) seja concluído. Especificamente, seu aplicativo tem permissão para inserir um sinal de cerca ou aguardar entre A e B, e o driver não tem visibilidade disso, portanto, o driver deve garantir que tudo em A esteja concluído antes da operação de cerca. Não há essa oportunidade em uma única chamada para a API, portanto, o driver é capaz de otimizar esse cenário.
O driver é livre para corrigir as listas de comandos enviadas. É responsabilidade do aplicativo de chamada garantir que a GPU (unidade de processamento gráfico) não esteja lendo nenhuma das listas de comandos enviadas de uma execução anterior.
Os aplicativos são incentivados a agrupar em lote execuções de lista de comandos para reduzir os custos fixos associados aos comandos enviados à GPU.
Validação de runtime
Os pacotes não podem ser enviados diretamente para uma fila de comandos. Se um pacote for passado para esse método, o runtime removerá a chamada. O runtime também removerá a chamada se a função Fechar não tiver sido chamada em uma ou mais listas de comandos.
O runtime detectará se os alocadores de comando associados às listas de comandos foram redefinidos depois que Close foi chamado. O runtime removerá a chamada e removerá o dispositivo nessa situação.
O runtime removerá a chamada e removerá o dispositivo se a cerca da fila de comandos indicar que uma execução anterior de qualquer uma das listas de comandos ainda não foi concluída.
O runtime validará os estados "antes" e "depois" das barreiras de transição de recursos dentro de ExecuteCommandLists. Se o estado "antes" de uma transição não corresponder ao estado "depois" de uma transição anterior, o runtime removerá a chamada e removerá o dispositivo.
O runtime validará os estados "antes" e "depois" das consultas usadas pelas listas de comandos. Se um erro for detectado, o runtime removerá a chamada e removerá o dispositivo.
Camada de depuração
A camada de depuração emite erros para todos os casos em que o runtime removeria a chamada.
A camada de depuração emitirá um erro se detectar que qualquer recurso referenciado pelas listas de comandos, incluindo consultas, foi destruído.
Exemplos
Renderiza uma cena.
// Pipeline objects.
D3D12_VIEWPORT m_viewport;
ComPtr<IDXGISwapChain3> m_swapChain;
ComPtr<ID3D11DeviceContext> m_d3d11DeviceContext;
ComPtr<ID3D11On12Device> m_d3d11On12Device;
ComPtr<ID3D12Device> m_d3d12Device;
ComPtr<IDWriteFactory> m_dWriteFactory;
ComPtr<ID2D1Factory3> m_d2dFactory;
ComPtr<ID2D1Device2> m_d2dDevice;
ComPtr<ID2D1DeviceContext2> m_d2dDeviceContext;
ComPtr<ID3D12Resource> m_renderTargets[FrameCount];
ComPtr<ID3D11Resource> m_wrappedBackBuffers[FrameCount];
ComPtr<ID2D1Bitmap1> m_d2dRenderTargets[FrameCount];
ComPtr<ID3D12CommandAllocator> m_commandAllocators[FrameCount];
ComPtr<ID3D12CommandQueue> m_commandQueue;
ComPtr<ID3D12RootSignature> m_rootSignature;
ComPtr<ID3D12DescriptorHeap> m_rtvHeap;
ComPtr<ID3D12PipelineState> m_pipelineState;
ComPtr<ID3D12GraphicsCommandList> m_commandList;
D3D12_RECT m_scissorRect;
// Render the scene.
void D3D1211on12::OnRender()
{
// Record all the commands we need to render the scene into the command list.
PopulateCommandList();
// Execute the command list.
ID3D12CommandList* ppCommandLists[] = { m_commandList.Get() };
m_commandQueue->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists);
RenderUI();
// Present the frame.
ThrowIfFailed(m_swapChain->Present(1, 0));
MoveToNextFrame();
}
Consulte o código de exemplo na referência D3D12.
Requisitos
Plataforma de Destino | Windows |
Cabeçalho | d3d12.h |