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

Lihat juga

Antarmuka Core

ID3D12Pageable