ID3D12GraphicsCommandList::ExecuteBundle-Methode (d3d12.h)
Führt ein Bundle aus.
Syntax
void ExecuteBundle(
[in] ID3D12GraphicsCommandList *pCommandList
);
Parameter
[in] pCommandList
Typ: ID3D12GraphicsCommandList*
Gibt die ID3D12GraphicsCommandList- an, die das auszuführende Bundle bestimmt.
Rückgabewert
Nichts
Bemerkungen
Bundles erben den gesamten Status aus der übergeordneten Befehlsliste, in der ExecuteBundle- aufgerufen wird, mit Ausnahme des Pipelinestatusobjekts und der primitiven Topologie. Der gesamte Zustand, der in einem Bündel festgelegt ist, wirkt sich auf den Status der übergeordneten Befehlsliste aus. Beachten Sie, dass ExecuteBundle- kein Prädikatvorgang ist.
Laufzeitüberprüfung
Die Laufzeit überprüft, ob der Angerufene ein Bundle ist und dass der Aufrufer eine direkte Befehlsliste ist. Die Laufzeit überprüft auch, ob das Bundle geschlossen wurde. Wenn der Vertrag verletzt wird, wird die Laufzeit im Hintergrund den Anruf abwerfen. Ein Überprüfungsfehler führt zu Close rückgabenden E_INVALIDARG.Debugebene
Die Debugebene gibt eine Warnung in denselben Fällen aus, in denen die Laufzeit fehlschlägt. Die Debugebene gibt eine Warnung aus, wenn ein Prädikat festgelegt wird, wenn ExecuteCommandList- aufgerufen wird. Außerdem gibt die Debugebene einen Fehler aus, wenn erkannt wird, dass ein Ressourcenverweis durch die Befehlsliste zerstört wurde.Die Debugebene überprüft außerdem, ob der dem Bundle zugeordnete Befehlszuweisungsgeber nicht zurückgesetzt wurde, da Close in der Befehlsliste aufgerufen wurde. Diese Überprüfung erfolgt zu ExecuteBundle Uhrzeit und wenn die übergeordnete Befehlsliste in einer Befehlswarteschlange ausgeführt wird.
Beispiele
Im beispiel D3D12Bundles wird ID3D12GraphicsCommandList::ExecuteBundle wie folgt verwendet:
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());
}
Siehe Beispielcode in der D3D12-Referenz.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Fenster |
Header- | d3d12.h |
Library | D3d12.lib |
DLL- | D3d12.dll |