Método ID3D12GraphicsCommandList::ExecuteBundle (d3d12.h)
Ejecuta una agrupación.
Sintaxis
void ExecuteBundle(
[in] ID3D12GraphicsCommandList *pCommandList
);
Parámetros
[in] pCommandList
Tipo: ID3D12GraphicsCommandList*
Especifica id3D12GraphicsCommandList que determina la agrupación que se va a ejecutar.
Valor devuelto
None
Observaciones
Los conjuntos heredan todo el estado de la lista de comandos primarios en la que se llama a ExecuteBundle , excepto el objeto de estado de la canalización y la topología primitiva. Todo el estado establecido en una agrupación afectará al estado de la lista de comandos principal. Tenga en cuenta que ExecuteBundle no es una operación prededicda.
Validación en tiempo de ejecución
El tiempo de ejecución validará que el "destinatario" es un lote y que el "llamador" es una lista de comandos directas. El tiempo de ejecución también validará que se ha cerrado la agrupación. Si se infringe el contrato, el tiempo de ejecución quitará silenciosamente la llamada. El error de validación provocará que Close devuelva E_INVALIDARG.Capa de depuración
La capa de depuración emitirá una advertencia en los mismos casos en los que se producirá un error en el tiempo de ejecución. La capa de depuración emitirá una advertencia si se establece un predicado cuando se llama a ExecuteCommandList . Además, la capa de depuración emitirá un error si detecta que se ha destruido cualquier referencia de recursos por parte de la lista de comandos.La capa de depuración también validará que el asignador de comandos asociado a la agrupación no se ha restablecido desde que se llamó a Close en la lista de comandos. Esta validación se produce en tiempo executeBundle y cuando la lista de comandos primaria se ejecuta en una cola de comandos.
Ejemplos
El ejemplo D3D12Bundles usa ID3D12GraphicsCommandList::ExecuteBundle de la siguiente manera:
void D3D12Bundles::PopulateCommandList(FrameResource* pFrameResource)
{
// Command list allocators can only be reset when the associated
// command lists have finished execution on the GPU; apps should use
// fences to determine GPU execution progress.
ThrowIfFailed(m_pCurrentFrameResource->m_commandAllocator->Reset());
// However, when ExecuteCommandList() is called on a particular command
// list, that command list can then be reset at any time and must be before
// re-recording.
ThrowIfFailed(m_commandList->Reset(m_pCurrentFrameResource->m_commandAllocator.Get(), m_pipelineState1.Get()));
// Set necessary state.
m_commandList->SetGraphicsRootSignature(m_rootSignature.Get());
ID3D12DescriptorHeap* ppHeaps[] = { m_cbvSrvHeap.Get(), m_samplerHeap.Get() };
m_commandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps);
m_commandList->RSSetViewports(1, &m_viewport);
m_commandList->RSSetScissorRects(1, &m_scissorRect);
// Indicate that the back buffer will be used as a render target.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart(), m_frameIndex, m_rtvDescriptorSize);
CD3DX12_CPU_DESCRIPTOR_HANDLE dsvHandle(m_dsvHeap->GetCPUDescriptorHandleForHeapStart());
m_commandList->OMSetRenderTargets(1, &rtvHandle, FALSE, &dsvHandle);
// Record commands.
const float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
m_commandList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr);
m_commandList->ClearDepthStencilView(m_dsvHeap->GetCPUDescriptorHandleForHeapStart(), D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr);
if (UseBundles)
{
// Execute the prebuilt bundle.
m_commandList->ExecuteBundle(pFrameResource->m_bundle.Get());
}
else
{
// Populate a new command list.
pFrameResource->PopulateCommandList(m_commandList.Get(), m_pipelineState1.Get(), m_pipelineState2.Get(), m_currentFrameResourceIndex, m_numIndices, &m_indexBufferView,
&m_vertexBufferView, m_cbvSrvHeap.Get(), m_cbvSrvDescriptorSize, m_samplerHeap.Get(), m_rootSignature.Get());
}
// Indicate that the back buffer will now be used to present.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));
ThrowIfFailed(m_commandList->Close());
}
Vea Código de ejemplo en la referencia D3D12.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | d3d12.h |
Library | D3d12.lib |
Archivo DLL | D3d12.dll |