ID3D12CommandQueue::ExecuteCommandLists, méthode (d3d12.h)
Envoie un tableau de listes de commandes pour exécution.
Syntaxe
void ExecuteCommandLists(
[in] UINT NumCommandLists,
[in] ID3D12CommandList * const *ppCommandLists
);
Paramètres
[in] NumCommandLists
Nombre de listes de commandes à exécuter.
[in] ppCommandLists
Tableau des listes de commandes ID3D12CommandList à exécuter.
Valeur de retour
None
Notes
L’appel de ExecuteCommandLists deux fois de suite (à partir du même thread ou de threads différents) garantit que la première charge de travail (A) se termine avant la deuxième charge de travail (B). L’appel de ExecuteCommandLists avec deux listes de commandes permet au pilote de fusionner les deux listes de commandes de sorte que la deuxième liste de commandes (D) puisse commencer à exécuter le travail avant la fin de tout le travail de la première (C). Plus précisément, votre application est autorisée à insérer un signal de clôture ou à attendre entre A et B, et le conducteur n’a aucune visibilité sur cela, de sorte que le pilote doit s’assurer que tout dans A est terminé avant l’opération de clôture. En l’absence d’une telle possibilité dans un seul appel à l’API, le pilote est donc en mesure d’optimiser ce scénario.
Le pilote est libre de corriger les listes de commandes envoyées. Il incombe à l’application appelante de s’assurer que l’unité de traitement graphique (GPU) ne lit actuellement aucune des listes de commandes envoyées à partir d’une exécution précédente.
Les applications sont encouragées à traiter par lot les exécutions de liste de commandes afin de réduire les coûts fixes associés aux commandes envoyées au GPU.
Validation d'exécution
Les offres groupées ne peuvent pas être envoyées directement à une file d’attente de commandes. Si un bundle est passé à cette méthode, le runtime supprime l’appel. Le runtime supprime également l’appel si la fonction Close n’a pas été appelée sur une ou plusieurs listes de commandes.
Le runtime détecte si les allocateurs de commandes associés aux listes de commandes ont été réinitialisés après l’appel de Close . Le runtime supprime l’appel et supprime l’appareil dans cette situation.
Le runtime supprime l’appel et supprime l’appareil si la clôture de file d’attente de commandes indique qu’une exécution précédente de l’une des listes de commandes n’est pas encore terminée.
Le runtime valide les états « avant » et « après » des barrières de transition de ressources à l’intérieur de ExecuteCommandLists. Si l’état « avant » d’une transition ne correspond pas à l’état « après » d’une transition précédente, le runtime supprime l’appel et supprime l’appareil.
Le runtime valide les états « avant » et « après » des requêtes utilisées par les listes de commandes. Si une erreur est détectée, le runtime supprime l’appel et supprime l’appareil.
Couche Debug
La couche de débogage génère des erreurs pour tous les cas où le runtime supprime l’appel.
La couche de débogage génère une erreur si elle détecte que toute ressource référencée par les listes de commandes, y compris les requêtes, a été détruite.
Exemples
Affiche une scène.
// 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();
}
Reportez-vous à l’exemple de code dans la référence D3D12.
Spécifications
Plateforme cible | Windows |
En-tête | d3d12.h |