Antarmuka ID3D12CommandQueue (d3d12.h)
Menyediakan metode untuk mengirimkan daftar perintah, menyinkronkan eksekusi daftar perintah, melengkapi antrean perintah, dan memperbarui pemetaan petak peta sumber daya.
Warisan
Antarmuka ID3D12CommandQueue mewarisi dari ID3D12Pageable. ID3D12CommandQueue juga memiliki jenis anggota berikut:
Metode
Antarmuka ID3D12CommandQueue memiliki metode ini.
ID3D12CommandQueue::BeginEvent Tidak dimaksudkan untuk dipanggil secara langsung. Gunakan runtime peristiwa PIX untuk menyisipkan peristiwa ke dalam antrean perintah. (ID3D12CommandQueue.BeginEvent) |
ID3D12CommandQueue::CopyTileMappings Menyalin pemetaan dari sumber daya yang dipesan sumber daya ke sumber daya yang dipesan tujuan. |
ID3D12CommandQueue::EndEvent Tidak dimaksudkan untuk dipanggil secara langsung. Gunakan runtime peristiwa PIX untuk menyisipkan peristiwa ke dalam antrean perintah. (ID3D12CommandQueue.EndEvent) |
ID3D12CommandQueue::ExecuteCommandLists Mengirimkan array daftar perintah untuk eksekusi. |
ID3D12CommandQueue::GetClockCalibration Metode ini mengambil sampel penghitung tanda waktu CPU dan GPU pada saat yang sama. |
ID3D12CommandQueue::GetDesc Mendapatkan deskripsi antrean perintah. |
ID3D12CommandQueue::GetTimestampFrequency Metode ini digunakan untuk menentukan tingkat kenaikan penghitung tanda waktu GPU. |
ID3D12CommandQueue::SetMarker Tidak dimaksudkan untuk dipanggil secara langsung. Gunakan runtime peristiwa PIX untuk menyisipkan peristiwa ke dalam antrean perintah. (ID3D12CommandQueue.SetMarker) |
ID3D12CommandQueue::Signal Updates pagar ke nilai tertentu. |
ID3D12CommandQueue::UpdateTileMappings Updates pemetaan lokasi petak peta dalam sumber daya yang dipesan ke lokasi memori dalam timbunan sumber daya. |
ID3D12CommandQueue::Wait Mengantre tunggu sisi GPU, dan segera kembali. Tunggu sisi GPU adalah tempat GPU menunggu hingga pagar yang ditentukan mencapai atau melebihi nilai yang ditentukan. |
Keterangan
Gunakan ID3D12Device::CreateCommandQueue untuk membuat objek antrean perintah.
Contoh
Sampel D3D12nBodyGravity menggunakan ID3D12CommandQueue sebagai berikut:
Deklarasi file header.
// Compute objects.
ComPtr<ID3D12CommandAllocator> m_computeAllocator[ThreadCount];
ComPtr<ID3D12CommandQueue> m_computeCommandQueue[ThreadCount];
ComPtr<ID3D12GraphicsCommandList> m_computeCommandList[ThreadCount];
Utas komputasi asinkron.
DWORD D3D12nBodyGravity::AsyncComputeThreadProc(int threadIndex)
{
ID3D12CommandQueue* pCommandQueue = m_computeCommandQueue[threadIndex].Get();
ID3D12CommandAllocator* pCommandAllocator = m_computeAllocator[threadIndex].Get();
ID3D12GraphicsCommandList* pCommandList = m_computeCommandList[threadIndex].Get();
ID3D12Fence* pFence = m_threadFences[threadIndex].Get();
while (0 == InterlockedGetValue(&m_terminating))
{
// Run the particle simulation.
Simulate(threadIndex);
// Close and execute the command list.
ThrowIfFailed(pCommandList->Close());
ID3D12CommandList* ppCommandLists[] = { pCommandList };
pCommandQueue->ExecuteCommandLists(1, ppCommandLists);
// Wait for the compute shader to complete the simulation.
UINT64 threadFenceValue = InterlockedIncrement(&m_threadFenceValues[threadIndex]);
ThrowIfFailed(pCommandQueue->Signal(pFence, threadFenceValue));
ThrowIfFailed(pFence->SetEventOnCompletion(threadFenceValue, m_threadFenceEvents[threadIndex]));
WaitForSingleObject(m_threadFenceEvents[threadIndex], INFINITE);
// Wait for the render thread to be done with the SRV so that
// the next frame in the simulation can run.
UINT64 renderContextFenceValue = InterlockedGetValue(&m_renderContextFenceValues[threadIndex]);
if (m_renderContextFence->GetCompletedValue() < renderContextFenceValue)
{
ThrowIfFailed(pCommandQueue->Wait(m_renderContextFence.Get(), renderContextFenceValue));
InterlockedExchange(&m_renderContextFenceValues[threadIndex], 0);
}
// Swap the indices to the SRV and UAV.
m_srvIndex[threadIndex] = 1 - m_srvIndex[threadIndex];
// Prepare for the next frame.
ThrowIfFailed(pCommandAllocator->Reset());
ThrowIfFailed(pCommandList->Reset(pCommandAllocator, m_computeState.Get()));
}
return 0;
}
Lihat Contoh Kode dalam Referensi D3D12.
Persyaratan
Target Platform | Windows |
Header | d3d12.h |