Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Proporciona métodos para enviar listas de comandos, sincronizar la ejecución de la lista de comandos, instrumentar la cola de comandos y actualizar las asignaciones de iconos de recursos.
Herencia
La interfaz ID3D12CommandQueue hereda de ID3D12Pageable. ID3D12CommandQueue también tiene estos tipos de miembros:
Métodos
La interfaz ID3D12CommandQueue tiene estos métodos.
|
ID3D12CommandQueue::BeginEvent No se debe llamar a este método directamente. Use el entorno de ejecución de eventos PIX para insertar eventos en una cola de comandos. (ID3D12CommandQueue.BeginEvent) |
|
ID3D12CommandQueue::CopyTileMappings Copia las asignaciones de un recurso reservado de origen en un recurso reservado de destino. |
|
ID3D12CommandQueue::EndEvent No se debe llamar a este método directamente. Use el entorno de ejecución de eventos PIX para insertar eventos en una cola de comandos. (ID3D12CommandQueue.EndEvent) |
|
ID3D12CommandQueue::ExecuteCommandLists Envía una matriz de listas de comandos para su ejecución. |
|
ID3D12CommandQueue::GetClockCalibration Este método muestra los contadores de marca de tiempo de CPU y GPU al mismo tiempo. |
|
ID3D12CommandQueue::GetDesc Obtiene la descripción de la cola de comandos. |
|
ID3D12CommandQueue::GetTimestampFrequency Este método se usa para determinar la velocidad a la que se incrementa el contador de marca de tiempo de LA GPU. |
|
ID3D12CommandQueue::SetMarker No se debe llamar a este método directamente. Use el entorno de ejecución de eventos PIX para insertar eventos en una cola de comandos. (ID3D12CommandQueue.SetMarker) |
|
ID3D12CommandQueue::Signal Novedades una barrera a un valor especificado. |
|
ID3D12CommandQueue::UpdateTileMappings Novedades asignaciones de ubicaciones de iconos en recursos reservados a ubicaciones de memoria en un montón de recursos. |
|
ID3D12CommandQueue::Wait Pone en cola una espera del lado de GPU y devuelve inmediatamente. Una espera del lado de GPU es donde la GPU espera hasta que la barrera especificada alcanza o supera el valor especificado. |
Comentarios
Use ID3D12Device::CreateCommandQueue para crear un objeto de cola de comandos.
Ejemplos
El ejemplo D3D12nBodyGravity usa ID3D12CommandQueue de la siguiente manera:
Declaraciones de archivo de encabezado.
// Compute objects.
ComPtr<ID3D12CommandAllocator> m_computeAllocator[ThreadCount];
ComPtr<ID3D12CommandQueue> m_computeCommandQueue[ThreadCount];
ComPtr<ID3D12GraphicsCommandList> m_computeCommandList[ThreadCount];
Subproceso de proceso asincrónico.
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;
}
Consulte el código de ejemplo en la referencia de D3D12.
Requisitos
| Plataforma de destino | Windows |
| Encabezado | d3d12.h |