Metodo ID3D12CommandQueue::ExecuteCommandLists (d3d12.h)
Invia una matrice di elenchi di comandi per l'esecuzione.
Sintassi
void ExecuteCommandLists(
[in] UINT NumCommandLists,
[in] ID3D12CommandList * const *ppCommandLists
);
Parametri
[in] NumCommandLists
Numero di elenchi di comandi da eseguire.
[in] ppCommandLists
Matrice di elenchi di comandi ID3D12CommandList da eseguire.
Valore restituito
nessuno
Osservazioni
La chiamata a ExecuteCommandLists due volte in successione (dallo stesso thread o thread diversi) garantisce che il primo carico di lavoro (A) venga completato prima del secondo carico di lavoro (B). La chiamata a ExecuteCommandLists con due elenchi di comandi consente al driver di unire i due elenchi di comandi, in modo che il secondo elenco di comandi (D) possa iniziare a eseguire il lavoro prima che tutto il lavoro dal primo (C) sia terminato. In particolare, l'applicazione può inserire un segnale di recinzione o attendere tra A e B e il driver non ha visibilità in questo modo, quindi il driver deve assicurarsi che tutto in A sia completato prima dell'operazione di recinzione. Non esiste alcuna opportunità in una singola chiamata all'API, quindi il driver è in grado di ottimizzare tale scenario.
Il driver è libero di applicare patch agli elenchi di comandi inviati. È responsabilità dell'applicazione chiamante assicurarsi che l'unità di elaborazione grafica (GPU) non stia attualmente leggendo gli elenchi di comandi inviati da un'esecuzione precedente.
Le applicazioni sono incoraggiate a raggruppare le esecuzioni dell'elenco di comandi per ridurre i costi fissi associati ai comandi inviati alla GPU.
Convalida runtime
I bundle non possono essere inviati direttamente a una coda di comandi. Se un bundle viene passato a questo metodo, il runtime rilascia la chiamata. Il runtime rilascia anche la chiamata se la funzione Close non è stata chiamata in uno o più elenchi di comandi.
Il runtime rileverà se i allocatori di comando associati agli elenchi di comandi sono stati reimpostati dopo la chiamata a Close . Il runtime eliminerà la chiamata e rimuoverà il dispositivo in questa situazione.
Il runtime eliminerà la chiamata e rimuoverà il dispositivo se la recinzione della coda di comandi indica che un'esecuzione precedente di uno degli elenchi di comandi non è ancora stata completata.
Il runtime convalida gli stati "prima" e "after" delle barriere di transizione delle risorse all'interno di ExecuteCommandLists. Se lo stato "prima" di una transizione non corrisponde allo stato "dopo" di una transizione precedente, il runtime eliminerà la chiamata e rimuoverà il dispositivo.
Il runtime convalida gli stati "prima" e "dopo" delle query usate dagli elenchi di comandi. Se viene rilevato un errore, il runtime eliminerà la chiamata e rimuoverà il dispositivo.
Livello di debug
Il livello di debug genera errori per tutti i casi in cui il runtime rilascia la chiamata.
Il livello di debug genera un errore se rileva che qualsiasi risorsa a cui fa riferimento gli elenchi di comandi, incluse le query, è stata eliminata.
Esempio
Esegue il rendering di una scena.
// 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();
}
Fare riferimento al codice di esempio nel riferimento D3D12.
Requisiti
Piattaforma di destinazione | Windows |
Intestazione | d3d12.h |