METODE ID3D12CommandQueue::ExecuteCommandLists (d3d12.h)

Mengirimkan array daftar perintah untuk eksekusi.

Sintaks

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

Parameter

[in] NumCommandLists

Jumlah daftar perintah yang akan dijalankan.

[in] ppCommandLists

Array dari daftar perintah ID3D12CommandList yang akan dijalankan.

Menampilkan nilai

Tidak ada

Keterangan

Memanggil ExecuteCommandLists dua kali berturut-turut (dari utas yang sama, atau utas yang berbeda) menjamin bahwa beban kerja pertama (A) selesai sebelum beban kerja kedua (B). Memanggil ExecuteCommandLists dengan dua daftar perintah memungkinkan driver untuk menggabungkan dua daftar perintah sehingga daftar perintah kedua (D) dapat mulai mengeksekusi pekerjaan sebelum semua pekerjaan dari yang pertama (C) selesai. Secara khusus, aplikasi Anda diizinkan untuk memasukkan sinyal pagar atau menunggu antara A dan B, dan driver tidak memiliki visibilitas ke dalam ini, sehingga driver harus memastikan bahwa semua yang ada di A selesai sebelum operasi pagar. Tidak ada kesempatan seperti itu dalam satu panggilan ke API, sehingga driver dapat mengoptimalkan skenario tersebut.

Driver bebas untuk menambal daftar perintah yang dikirimkan. Ini adalah tanggung jawab aplikasi panggilan untuk memastikan bahwa unit pemrosesan grafis (GPU) saat ini tidak membaca salah satu daftar perintah yang dikirimkan dari eksekusi sebelumnya.

Aplikasi didorong untuk mengumpulkan eksekusi daftar perintah untuk mengurangi biaya tetap yang terkait dengan perintah yang dikirimkan ke GPU.

Validasi runtime

Bundel tidak dapat dikirimkan ke antrean perintah secara langsung. Jika bundel diteruskan ke metode ini, runtime akan menghilangkan panggilan. Runtime juga akan menghilangkan panggilan jika fungsi Tutup belum dipanggil pada satu atau beberapa daftar perintah.

Runtime akan mendeteksi apakah alokator perintah yang terkait dengan daftar perintah telah direset setelah Tutup dipanggil. Runtime akan menghilangkan panggilan dan menghapus perangkat dalam situasi ini.

Runtime akan menghilangkan panggilan dan menghapus perangkat jika pagar antrean perintah menunjukkan bahwa eksekusi sebelumnya dari salah satu daftar perintah belum selesai.

Runtime akan memvalidasi status "sebelum" dan "setelah" penghalang transisi sumber daya di dalam ExecuteCommandLists. Jika status transisi "sebelum" tidak cocok dengan status "setelah" transisi sebelumnya, maka runtime akan menghilangkan panggilan dan menghapus perangkat.

Runtime akan memvalidasi status kueri "sebelum" dan "setelah" yang digunakan oleh daftar perintah. Jika kesalahan terdeteksi, maka runtime akan menghilangkan panggilan dan menghapus perangkat.

Lapisan debug

Lapisan debug mengeluarkan kesalahan untuk semua kasus di mana runtime akan menghilangkan panggilan.

Lapisan debug mengeluarkan kesalahan jika mendeteksi bahwa sumber daya apa pun yang direferensikan oleh daftar perintah, termasuk kueri, telah dihancurkan.

Contoh

Merender adegan.

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

Lihat Contoh Kode dalam Referensi D3D12.

Persyaratan

   
Target Platform Windows
Header d3d12.h

Lihat juga

ID3D12CommandQueue