Freigeben über


ID3D12CommandQueue::ExecuteCommandLists-Methode (d3d12.h)

Übermittelt ein Array von Befehlslisten zur Ausführung.

Syntax

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

Parameter

[in] NumCommandLists

Die Anzahl der auszuführenden Befehlslisten.

[in] ppCommandLists

Das Array von ID3D12CommandList-Befehlen , die ausgeführt werden sollen.

Rückgabewert

Keine

Bemerkungen

Wenn ExecuteCommandLists zweimal hintereinander aufgerufen wird (aus demselben Thread oder verschiedenen Threads), wird sichergestellt, dass die erste Workload (A) vor der zweiten Workload (B) abgeschlossen wird. Wenn ExecuteCommandLists mit zwei Befehlslisten aufgerufen wird, kann der Treiber die beiden Befehlslisten so zusammenführen, dass die zweite Befehlsliste (D) möglicherweise mit der Ausführung der Arbeit beginnt, bevor alle Arbeiten der ersten (C) abgeschlossen sind. Insbesondere darf Ihre Anwendung ein Zaunsignal einfügen oder zwischen A und B warten, und der Treiber hat keinen Einblick in dies, sodass der Treiber sicherstellen muss, dass alles in A vor dem Zaunvorgang abgeschlossen ist. Es gibt keine solche Möglichkeit in einem einzelnen Aufruf der API, sodass der Treiber dieses Szenario optimieren kann.

Der Treiber kann die übermittelten Befehlslisten kostenlos patchen. Es liegt in der Verantwortung der aufrufenden Anwendung sicherzustellen, dass die Grafikverarbeitungseinheit (GPU) derzeit keine der übermittelten Befehlslisten aus einer vorherigen Ausführung liest.

Anwendungen werden empfohlen, Befehlslistenausführungen in Batches zusammenzuführen, um die Fixkosten im Zusammenhang mit übermittelten Befehlen an die GPU zu reduzieren.

Laufzeitüberprüfung

Bundles können nicht direkt an eine Befehlswarteschlange übermittelt werden. Wenn ein Bundle an diese Methode übergeben wird, wird der Aufruf von der Runtime gelöscht. Die Laufzeit beendet auch den Aufruf, wenn die Close-Funktion in einer oder mehreren Befehlslisten nicht aufgerufen wurde.

Die Runtime erkennt, ob die Befehlszuweisungen, die den Befehlslisten zugeordnet sind, nach dem Aufruf von Close zurückgesetzt wurden. In dieser Situation wird der Aufruf von der Runtime gelöscht und das Gerät entfernt.

Die Runtime beendet den Aufruf und entfernt das Gerät, wenn der Befehlswarteschlangenzaun angibt, dass eine vorherige Ausführung einer der Befehlslisten noch nicht abgeschlossen wurde.

Die Runtime überprüft die Zustände "vor" und "nach" von Ressourcenübergangsbarrieren innerhalb von ExecuteCommandLists. Wenn der Status "vor" eines Übergangs nicht mit dem "Nach"-Zustand eines vorherigen Übergangs übereinstimmt, wird der Aufruf von der Laufzeit gelöscht und das Gerät entfernt.

Die Runtime überprüft die Zustände "vor" und "nach" von Abfragen, die von den Befehlslisten verwendet werden. Wenn ein Fehler erkannt wird, wird der Aufruf von der Runtime gelöscht und das Gerät entfernt.

Debugebene

Die Debugebene gibt Fehler für alle Fälle aus, in denen die Laufzeit den Aufruf absetzen würde.

Die Debugebene gibt einen Fehler aus, wenn sie erkennt, dass eine Ressource, auf die von den Befehlslisten verwiesen wird, einschließlich Abfragen, zerstört wurde.

Beispiele

Rendert eine Szene.

// 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();
}

Weitere Informationen finden Sie im Beispielcode in der D3D12-Referenz.

Anforderungen

   
Zielplattform Windows
Kopfzeile d3d12.h

Weitere Informationen

ID3D12CommandQueue