Freigeben über


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

Siehe auch

ID3D12GraphicsCommandList-