Compartir a través de


Método ID3D12CommandQueue::ExecuteCommandLists (d3d12.h)

Envía una matriz de listas de comandos para su ejecución.

Sintaxis

void ExecuteCommandLists(
  [in] UINT              NumCommandLists,
  [in] ID3D12CommandList * const *ppCommandLists
);

Parámetros

[in] NumCommandLists

Número de listas de comandos que se van a ejecutar.

[in] ppCommandLists

Matriz de listas de comandos ID3D12CommandList que se van a ejecutar.

Valor devuelto

None

Observaciones

Llamar a ExecuteCommandLists dos veces en sucesión (desde el mismo subproceso o subprocesos diferentes) garantiza que la primera carga de trabajo (A) finalice antes de la segunda carga de trabajo (B). Llamar a ExecuteCommandLists con dos listas de comandos permite al controlador combinar las dos listas de comandos de forma que la segunda lista de comandos (D) pueda comenzar a ejecutarse antes de que finalice todo el trabajo desde el primer (C). En concreto, la aplicación puede insertar una señal de valla o esperar entre A y B, y el controlador no tiene visibilidad sobre esto, por lo que el controlador debe asegurarse de que todo en A se complete antes de la operación de barrera. No hay ninguna oportunidad de este tipo en una sola llamada a la API, por lo que el controlador puede optimizar ese escenario.

El controlador es gratuito para aplicar revisiones a las listas de comandos enviadas. Es responsabilidad de la aplicación que realiza la llamada asegurarse de que la unidad de procesamiento de gráficos (GPU) no está leyendo actualmente ninguna de las listas de comandos enviadas de una ejecución anterior.

Se recomienda a las aplicaciones procesar por lotes las ejecuciones de listas de comandos para reducir los costos fijos asociados con los comandos enviados a la GPU.

Validación en tiempo de ejecución

Los paquetes no se pueden enviar directamente a una cola de comandos. Si se pasa una agrupación a este método, el tiempo de ejecución quitará la llamada. El tiempo de ejecución también quitará la llamada si no se ha llamado a la función Close en una o varias de las listas de comandos.

El tiempo de ejecución detectará si se han restablecido los asignadores de comandos asociados a las listas de comandos después de llamar a Close . El tiempo de ejecución quitará la llamada y quitará el dispositivo en esta situación.

El tiempo de ejecución quitará la llamada y quitará el dispositivo si la barrera de la cola de comandos indica que aún no se ha completado una ejecución anterior de cualquiera de las listas de comandos.

El tiempo de ejecución validará los estados "antes" y "después" de las barreras de transición de recursos dentro de ExecuteCommandLists. Si el estado "anterior" de una transición no coincide con el estado "después" de una transición anterior, el tiempo de ejecución quitará la llamada y quitará el dispositivo.

El tiempo de ejecución validará los estados "antes" y "después" de las consultas usadas por las listas de comandos. Si se detecta un error, el tiempo de ejecución quitará la llamada y quitará el dispositivo.

Capa de depuración

La capa de depuración emite errores para todos los casos en los que el tiempo de ejecución quitaría la llamada.

La capa de depuración emite un error si detecta que se ha destruido cualquier recurso al que hacen referencia las listas de comandos, incluidas las consultas.

Ejemplos

Representa una escena.

// 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 el código de ejemplo en la referencia de D3D12.

Requisitos

   
Plataforma de destino Windows
Encabezado d3d12.h

Consulte también

ID3D12CommandQueue