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

Keine

Bemerkungen

Bundles erben den gesamten Zustand von der übergeordneten Befehlsliste, für die ExecuteBundle aufgerufen wird, mit Ausnahme des Pipelinezustandsobjekts und der primitiven Topologie. Der gesamte Zustand, der in einem Bündel festgelegt ist, wirkt sich auf den Zustand der übergeordneten Befehlsliste aus. Beachten Sie, dass ExecuteBundle kein prädizierter Vorgang ist.

Laufzeitüberprüfung

Die Runtime überprüft, ob es sich bei dem "Angerufenen" um ein Bündel handelt und dass der "Aufrufer" eine direkte Befehlsliste ist. Die Runtime überprüft auch, ob das Bundle geschlossen wurde. Wenn der Vertrag verletzt wird, wird der Aufruf von der Runtime automatisch gelöscht. Ein Überprüfungsfehler führt dazu , dass Close E_INVALIDARG zurückgibt.

Debugebene

Die Debugebene gibt eine Warnung in denselben Fällen aus, in denen die Runtime 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 sie erkennt, dass ein Ressourcenverweis durch die Befehlsliste zerstört wurde.

Die Debugebene überprüft auch, ob der dem Bundle zugeordnete Befehlszuteilung nicht zurückgesetzt wurde, da Close in der Befehlsliste aufgerufen wurde. Diese Überprüfung erfolgt zur ExecuteBundle-Zeit und wenn die übergeordnete Befehlsliste in einer Befehlswarteschlange ausgeführt wird.

Beispiele

Im D3D12Bundles-Beispiel 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 Windows
Kopfzeile d3d12.h
Bibliothek D3d12.lib
DLL D3d12.dll

Weitere Informationen

ID3D12GraphicsCommandList